{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c8258c91",
   "metadata": {},
   "source": [
    "**FIR 滤波器设计**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d05321f",
   "metadata": {},
   "source": [
    "#### FIR 滤波器与 IIR 滤波器的比较"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7798c9f0",
   "metadata": {},
   "source": [
    "与无限持续时间脉冲响应(IIR)滤波器相比，具有有限持续时间脉冲响应的数字滤波器（全零或 FIR 滤波器）既有优点又有缺点"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "edcecd95",
   "metadata": {},
   "source": [
    "FIR 滤波器具有以下主要优点："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c8343dc",
   "metadata": {},
   "source": [
    "- 它们可以具有精确的线性相位。\n",
    "- 它们始终稳定。\n",
    "- 设计方法通常是线性的。\n",
    "- 它们可以在硬件中高效实现。\n",
    "- 滤波器启动瞬态具有有限持续时间。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27fc26b6",
   "metadata": {},
   "source": [
    "FIR 滤波器的主要缺点是，要达到同样的性能水平，其所需阶数远高于 IIR 滤波器。相应地，这些滤波器的延迟通常比同等性能的 IIR 滤波器大得多。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eae3bdc9",
   "metadata": {},
   "source": [
    "#### FIR 滤波器概述"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "135ff696",
   "metadata": {},
   "source": [
    "下表描述了FIR滤波器的设计方法，和相应的Matlab,Python函数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bab1557c",
   "metadata": {},
   "source": [
    "滤波器设计方法 | 说明 | Matlab滤波器设计函数 | Python滤波器设计函数\n",
    "---------------|------|----------------------|--------------------\n",
    "加窗 | 对指定的矩形滤波器的截断傅里叶逆变换应用加窗 | fir1, fir2, kaiserord | firwin, firwin2, kaiserord\n",
    "多频带（包含过渡带） | 对频率范围的子带使用等波纹或最小二乘方法 | firls、firpm、firpmord | firls, remez\n",
    "约束最小二乘 | 根据最大误差约束，在整个频率范围内最小化平方积分误差 | fircls, fircls1 | firls\n",
    "任意响应 | 任意响应，包括非线性相位和复滤波器 | cfirpm | firls"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "92e2cab8",
   "metadata": {},
   "source": [
    "#### 线性相位滤波器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74a6a842",
   "metadata": {},
   "source": [
    "除Matlab的cfirpm函数外，所有FIR滤波器设计函数都只设计线性相位滤波器。这些滤波器系数或“抽头”遵循偶数或奇数对称关系。根据这种对称性以及滤波器的阶数N是偶数还是奇数，线性相位滤波器（存储在长度为n +1的向量b中）对其频率响应有一定的固有限制。"
   ]
  },
  {
   "attachments": {
    "1647937376%281%29.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "f3836ab7",
   "metadata": {},
   "source": [
    "![1647937376%281%29.png](attachment:1647937376%281%29.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30371834",
   "metadata": {},
   "source": [
    "线性相位FIR滤波器的相位延迟和群延迟在整个频带内相等且恒定。对于N阶线性相位FIR滤波器，群延迟为N/2，滤波后的信号延迟N/2个时间步（其傅里叶变换的幅值按滤波器的幅值响应进行缩放）。该属性保持通带中信号的波形；也就是说，没有相位失真。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "360e83c1",
   "metadata": {},
   "source": [
    "#### 加窗方法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c27bfe1a",
   "metadata": {},
   "source": [
    "假设一个截止频率为$\\omega_0$弧度/秒的理想的矩形数字低通滤波器。该滤波器在幅值小于$\\omega_0$的所有频率上都具有幅值1，在幅值介于$\\omega_0$和$$之\\pi间的频率上具有幅值0。其脉冲响应序列$h(n)$为"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d55edadf",
   "metadata": {},
   "source": [
    "$$h(n)=\\frac{1}{2\\pi}\\int_{-\\pi}^{\\pi}{H(\\omega)e^{j\\omega n}d\\omega}=\\frac{1}{2\\pi}\\int_{-\\omega_0}^{\\omega_0}{e^{j\\omega n}d\\omega}=\\frac{sin{\\omega_0n}}{\\pi n}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f8c4da0",
   "metadata": {},
   "source": [
    "该滤波器不可实现，因为它的脉冲响应是无限的和非因果的。要创建有限持续时间脉冲响应，请通过应用加窗来截断它。通过在此截断中保留脉冲响应的中心部分，可以获得线性相位FIR滤波器。例如，一个低通截止频率$\\omega_0$为$0.4\\pi$弧度/秒的、长度为51的滤波器为"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c2bc3678",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import signal\n",
    "from scipy import special\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "b = 0.4*special.sinc(0.4*np.arange(-25,26))\n",
    "w,h = signal.freqz(b,1)\n",
    "fig,ax = plt.subplots()\n",
    "ax.plot(w/np.pi,np.square(np.abs(h)));ax.grid()\n",
    "ax.set_ylabel('Magnitude squared')\n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')\n",
    "ax.set_title('Magnitude Response(squared)')\n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2dfe64d7",
   "metadata": {},
   "source": [
    "此处应用的加窗是简单的矩形窗。根据**Parseval**定理，长度为51的滤波器在积分最小二乘意义上最接近理想的低通滤波器。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65da585f",
   "metadata": {},
   "source": [
    "响应中会出现振铃和波纹，尤其是在频带边缘附近。这种“吉布斯效应”不会随着滤波器长度的增加而消失，但非矩形窗会减小其幅值。在时域中将信号乘以一个窗函数会使信号在频域中发生卷积或平滑。将长度为51的Hamming窗应用于滤波器，并显示结果："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b7fb4ba3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "b = 0.4*special.sinc(0.4*np.arange(-25,26))\n",
    "b = b*signal.windows.hamming(51)\n",
    "w,h = signal.freqz(b,1)\n",
    "fig,ax = plt.subplots()\n",
    "ax.plot(w/np.pi,np.square(np.abs(h)));ax.grid()\n",
    "ax.set_ylabel('Magnitude squared')\n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')\n",
    "ax.set_title('Magnitude Response(squared)')\n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed7e00d5",
   "metadata": {},
   "source": [
    "使用`Hamming`窗可以大大降低振铃。这一改善以过渡带宽度和最优性为代价：加窗的滤波器需要更长时间从通带下降到阻带，且无法最小化平方误差积分。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c67ed80f",
   "metadata": {},
   "source": [
    "1. 标准频带 FIR 滤波器设计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "261be067",
   "metadata": {},
   "source": [
    "`fir1/firwin`使用最小二乘逼近计算滤波器系数，然后通过加窗对脉冲响应进行平滑处理。有关加窗及其属性的概述，请参阅加窗法。`fir1/firwin`类似于IIR滤波器的设计函数，因为它用于设计标准频带配置（低通、带通、高通和带阻）条件下的滤波器。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5acce364",
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 51 #创建的是N=50阶的FIR滤波器\n",
    "Wn = 0.4\n",
    "b = signal.firwin(n,Wn)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "738b44e4",
   "metadata": {},
   "source": [
    "此处创建变量b，其中包含N阶`Hamming`窗滤波器的系数。这是一个低通线性相位FIR滤波器，截止频率为Wn。Wn是介于0和1之间的数字，其中1对应于Nyquist频率，即采样频率的一半。（与其他方法不同，此处Wn对应于6dB点。）要获得高通滤波器，只需将`'high'/'highpass'`添加到函数的参数列表中。要获得带通或带阻滤波器，请将Wn指定为包含通带边缘频率的二元素向量。为带阻配置追加`'stop'/'stoppass'`。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40593eee",
   "metadata": {},
   "source": [
    "**fir1/firwin**使用window参数中指定的窗口进行设计。向量window的长度必须为n+1个元素。如果未指定窗口，**fir1/firwin**将应用`Hamming`窗。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8be0db54",
   "metadata": {},
   "source": [
    "2. Kaiser 窗阶估计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fffbcb48",
   "metadata": {},
   "source": [
    "**kaiserord**函数估计滤波器阶数、截止频率和Kaiser窗$\\beta$参数(Python中有**kaiser_beta**函数估计$\\beta$)，使之满足一组给定的滤波器设定。在给定频带边缘向量和对应的幅值向量以及最大允许波纹的情况下，`kaiserord`为**fir1**函数返回适当的输入参数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "deb5e00f",
   "metadata": {},
   "source": [
    "3. 多频带FIR滤波器设计：fir2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbb17582",
   "metadata": {},
   "source": [
    "**fir2/firwin2**函数还可用于设计加窗的FIR滤波器，但具有任意形状的分段线性频率响应。这与**fir1/firwin**不同，后者仅设计具有标准低通、高通、带通和带阻配置的滤波器。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6cf4527d",
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 51 #创建的是N=50阶的FIR滤波器\n",
    "f = np.array([0,0.4,0.5,1])\n",
    "gain = np.array([1,1,0,0])\n",
    "b = signal.firwin2(n,f,gain)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9160f64",
   "metadata": {},
   "source": [
    "返回的变量b，其中包含N阶FIR滤波器的N+1个系数，其频率幅值特征与向量f和m给出的频率幅值特征相匹配。f是频率点的向量，范围从0到1，其中1代表Nyquist频率。m是向量，包含f中指定点的指定幅值响应。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5db970c7",
   "metadata": {},
   "source": [
    "#### 具有过渡带的多频带 FIR 滤波器设计"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9243c61b",
   "metadata": {},
   "source": [
    "与**fir1/firwin**和**fir2/firwin2**函数相比，**firls**和**firpm/remez**函数提供更通用的指定理想滤波器的方法。这些函数用于设计Hilbert变换器、微分器和其他具有奇数对称系数（III类和IV类线性相位）的滤波器。它们还允许您包括误差没有最小化的过渡或“不重要”区域，并执行最小化的频带相关加权。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5f5251b",
   "metadata": {},
   "source": [
    "**firls**函数是**fir1/firwin**和**fir2/firwin2**函数的扩展，它用于最小化指定频率响应和实际频率响应之间误差平方的积分。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a362cd1f",
   "metadata": {},
   "source": [
    "Matlab的**firpm**函数实现**Parks-McClellan**算法，该算法使用**Remez**交换算法和**Chebyshev**逼近理论来设计在指定频率响应和实际频率响应之间具有最佳拟合的滤波器。这种滤波器可最小化指定频率响应和实际频率响应之间的最大误差，从这种意义上而言，它们是最优的滤波器；它们有时被称为**minimax**滤波器。以这种方式设计的滤波器在频率响应方面表现出等波纹特性，因此也称为等波纹滤波器。**Parks-McClellan** FIR滤波器设计算法可能是最流行和最广泛使用的FIR滤波器设计方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f81705e6",
   "metadata": {},
   "source": [
    "Python中使用**Remez**交换算法计算有限冲激响应（FIR）滤波器的滤波器系数，可以得到**minimax**最优滤波器。该滤波器的传递函数使指定频带内的期望增益和实现增益之间的最大误差最小化。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d9bafe3",
   "metadata": {},
   "source": [
    "**firls**和**firpm/remez**的语法相同；唯一的区别体现在最小化方案上。下一个示例说明用**firls**和**firpm/remez**设计的滤波器如何反映这些不同方案。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3bd639d1",
   "metadata": {},
   "source": [
    "1. 基本配置"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3550537",
   "metadata": {},
   "source": [
    "**firls**和**firpm/remez**的默认操作模式是设计I类或II类线性相位滤波器，具体取决于您所需的阶是偶数还是奇数。以下低通示例在0到0.4 Hz逼近幅值1，在0.5到1.0 Hz逼近幅值0："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5b194742",
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 21 \n",
    "f = np.array([0,0.4,0.5,1]) \n",
    "m = np.array([1,0]) \n",
    "b = signal.remez(n,f,m,Hz=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b1042f5",
   "metadata": {},
   "source": [
    "从0.4 Hz到0.5 Hz，**firpm/remez**不执行误差最小化；这是一个过渡带或“不重要”区域。过渡带将您关心的频带中的误差降至最低，但代价是过渡速率变慢。在这种方式下，这些类型的滤波器具有固有折衷，类似于加窗的FIR设计。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "465e83eb",
   "metadata": {},
   "source": [
    "要将最小二乘与等波纹滤波器设计进行比较，请使用firls创建一个类似的滤波器："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "83eff968",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "bb = signal.firls(n,f,np.array([1,1,0,0])) \n",
    "w1,h1 = signal.freqz(b,1)  \n",
    "w2,h2 = signal.freqz(bb,1)  \n",
    "fig,ax = plt.subplots()  \n",
    "ax.plot(w1/np.pi,np.square(np.abs(h1))) \n",
    "ax.plot(w2/np.pi,np.square(np.abs(h2)));ax.grid()  \n",
    "ax.set_ylabel('Magnitude squared')  \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')  \n",
    "ax.set_title('Magnitude Response(squared)')  \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61134819",
   "metadata": {},
   "source": [
    "使用**firpm/remez**设计的滤波器表现出等波纹行为。另请注意，**firls**滤波器在大部分通带和阻带上都有更好的响应，但在频带边缘（f = 0.4和f = 0.5）处，响应不如**firpm/remez**滤波器的响应理想。这表明，**firpm/remez**滤波器在通带和阻带上的最大误差较小，事实上，对于该频带边缘配置和滤波器长度来说，这是可能的最小值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb380e5c",
   "metadata": {},
   "source": [
    "可以将频带视为短频率间隔内的线。**firpm/remez**和**firls**使用此方案来表示具有任何过渡带的任何分段线性频率响应函数。**firls**和**firpm/remez**用于设计低通、高通、带通和带阻滤波器；以下是一个带通示例，从技术上讲，这些f和a向量定义五个频带："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6492bc12",
   "metadata": {},
   "source": [
    "- 两个阻带，从0.0到0.3和从0.8到1.0；\n",
    "- 一个通带，从0.4到0.7；\n",
    "- 两个过渡带，从0.3到0.4和从0.7到0.8；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a8280352",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEaCAYAAAAcz1CnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA3K0lEQVR4nO3deZxcVZn/8c+3u9N7J530kpA9kBAIAdl3hrApyqajsomI8pOfjqi4/cRlGMRxxnVejiOoqIjgKCIKAiIiSIvsEPYEAlnJ3ls6vaX35/fHvZWuNL1Ukq66tTzv16tfXcute586tTx1zrnnHJkZzjnnclde1AE455yLlicC55zLcZ4InHMux3kicM65HOeJwDnncpwnAuecy3GeCFxKSFomack47m+tpNPHa3/ZSNIiSc9KUtSx7ClJl0l6NLxcJOk1STVRx5VtPBHkgPBLs0dS9ZDbn5dkkuYmOwYzO8jM6sLjXivpV8k+5nAkLZE0IKldUpukFZI+HEUsKfB14LuWJYOFzKwbuAm4OupYso0ngtyxBrgodkXSwUBpdOFEapOZlQMTgc8AP5W0MOKYxpWkfYBTgLsiDmUnBfb2O+fXwIckFY1HTC7giSB33ApcGnf9Q8At8RtIOiusJbRKWi/p2iH3XyppnaQmSf8a3zwT/sq/XdIt4S/tZZKOjHvsWkmnSzoT+DJwQfir/MX4++O236XWIOmDccf+ypC48iRdLWlVeP/tkqaMVSAWuA9oBg4Za1+SiiX9Kry9RdIzkqaG99VJ+k9JT4fl98f4GCSdG5ZJS7jtgUPK5vOSXpK0XdJvJRWH91VLujd8XLOkf8S+TCVNl/R7SQ2S1kj6VNzTOwN4zsy64o7zRUkb42pCp4W3l0i6WdI2ScslfUHShrjHmaT5cddvlvTv4eXJYXwN4ePvlTQzbts6Sd+Q9BjQCewr6QBJfw2fzwpJ58dtXyXp7rAMnwb2G/KabQC2AceO9fq6xHkiyB1PAhMlHSgpH7gQGNo800GQLCqBs4CPS3o3BO3NwA3AB4B9gEnAjCGPPxe4LXz83cAPhwZhZvcD/wH81szKzextYwUeHvtHwAeB6UAVMDNuk08C7wZODu/fBlyfwH7zJJ0LVAMrE9jXhwie96wwho8BO+J2eSnwEYLy6QN+EB5nf+A3wFVADXAfcI+kwrjHng+cCcwjSEqXhbd/DtgQPm4qQRK1MBncA7xI8DqcBlwl6R3h4w4GVsQ914XAlcBRZlYBvANYG979bwRfuPuFt39ojKKLlwf8ApgDzA7LY+jr/kHgCqACaAD+SvDLvpbgfXhD+BpDUNZdBGX4kfBvqFeBMd83LnGeCHJLrFZwBsGHaWP8nWZWZ2Yvm9mAmb1E8OV1cnj3+4B7zOxRM+sBrgGGtj0/amb3mVl/eKzx+rC+D7jXzB4J24n/FRiIu/9jwFfMbEN4/7XA+yQVjLC/6ZJaCL607gQ+a2bPJ7CvXoIEMN/M+s1sqZm1xu33VjN7xcw6whjPD5PuBcCfzOyvZtYLfBcoAY6Pe+wPzGyTmTUTfMEfGt7eS/ClOMfMes3sH2Gb/1FAjZldZ2Y9ZrYa+CnBFysEybgtbv/9QBGwSNIEM1trZqvC+84HvmFmzWa2njCBJcLMmszs92bWaWZtwDcYfM/E3Gxmy8ysjyDZrTWzX5hZX1juvwfeH5bVe4FrzKzDzF4BfjnMYdvC5+fGiSeC3HIrcDHBr81bht4p6RhJD4fV/O0EX4qxDubpwPrYtmbWCTQN2cWWuMudQPEoX8a7Y+ixO4Ycew5wZ9h80kKQ5PoJfkEPZ5OZVRL0EfwAODXBfd0K/AW4TdImSd+WNCHusevjLq8DJhCU3/Tweiz+gXDb+BrV0LIrDy9/h6C28oCk1ZJiHaVzCBNaXKxfjnvO2wh+gceOuZKgRnItUC/pNknTw7t3Kd/4WMciqVTST8Jmu1bgEaAy/FKPid/3HOCYIXF/AJhGUOspSCCWCqAl0Rjd2DwR5BAzW0fQafwu4A/DbPJrgiadWWY2CfgxEDv1cDNxzTGSSgh+He9RKMPc1sGundfT4i5vJmiOiR27dMix1wPvNLPKuL9iM9ulxvOWIIJf/F8EDo41gY22r/AX+dfMbBHBr/mz2bXfZVbc5dkEv+YbgU0EX4Cx+BVuO2p8YYxtZvY5M9uXoOnts2Hb/npgzZA4K8zsXeFDXwL2H7KvX5vZiWEsBnwrvGuX8g1jj9fJyK/N54CFwDFmNhH4p9jTjD903OX1wN+HxF1uZh8naDbqGyMWgAMJmsTcOPFEkHsuB04Nf1UPVQE0m1mXpKMJag8xdwDnSDo+bNu+ll0/7LtjKzBXu55B8gJwoaQJCjqZ3zfk2GdLOjE89nXs+t79MfANSXMAJNVIOi+RQMJmru8RNHWNui9Jp0g6OPy120rwRR/fRHWJgnP3S8MY7wibyW4HzpJ0WliD+BzQDTw+VnySzpY0P0we2wlqJwPA00Bb2AFcIilf0mJJR4UP/StwuAY7nRdKOlXB2TZdBM1isdhvB74UdvzOJOgnifcCcHF4jDPZtemnItxXi4LO8X8b4yndC+yvoPN/Qvh3lKQDw7L6A3BtWNNYxJD+CkkzgCkEfV5unHgiyDFmtsrMnh3h7n8BrpPURvDFeHvc45YRfEHcRvALsh2oJ/hC212/C/83SXouvPyvBJ2V24CvEdRO4o/9ifC2zeE2O89qAf6boCbzQBj7k8AxuxHPTcBsSeeMsa9pBEmplaDJ6O8EzUUxtwI3EzTzFAOfCuNfAVwC/A9BDeEc4JwwCY1lAfAgQXk/AdxgZg+HX5pnE/QlrAn3+zOCzmzMbCvwNyCWEIuAb4bbbSHoqP1SeN/XCJpg1gAPDHlOAJ8OY24haMa5K+6+7xP0dzQSlNX9oz2ZsB/h7QR9GZvCWL4VxgdBh3Z5ePvNBB3R8S4GfhnW5tw4UZaMNXEpJqmc4IthgZmtiTicyEmqA35lZj+LOpaY8Bf1L4Gjd2dQmYIR4L8ys5ljbJpSYW3mReCfzKw+6niyidcIXMIknRNW2csIznx5mcFTEF2aMbPlZnZUNo0sNrMDPAmMP08EbnecR1Cd30TQZHFhtnzJOJfLvGnIOedynNcInHMux43HYJ+UqqystPnz54+9YQ7o6OigrKws6jDSgpfFIC+LQV4Wg5YuXdpoZsNO4Z1xiWDq1Kk8++xIZz/mlrq6OpYsWRJ1GGnBy2KQl8UgL4tBkkYcMe5NQ845l+M8ETjnXI7zROCccznOE4FzzuU4TwTOOZfjPBE451yO80TgnHM5LmnjCCTdRDBNbr2ZLR7mfhFM+fsugoUvLjOz54Zu59zu2Niygz+/vJnefuOE+VUcMrNyr/a3qqGd599sYWtrsAb8jMoSjpgzmVlTSsd4ZOK6evt5Zm0zK+vbad3RR2lhPvOqyzhq7hQmlU4YewcJamjrZum6ZtY1ddLTN0BNRRFvm1XJAdMqCD6Oe2Z9cyd/e62e7r5+Tj2glvm1FWM/yKWVZA4ou5lgEeu3LIkYeifBxGULCOZ7/xG7N4e8c7u4/5XNXPXbF+jqHVwr5ph5U/jqWYs4eOakhPfT0zfA75/bwM2PrWXF1rZhtzlo+kQ+cMwc3n3YdEoLd/9jZGY8sbqJWx5fR93r9bvEHFOQJ46fX80FR87izMXTyM/b/S9rM2Ppum384rG13L9sC/0Db51bbNaUEj547BwuOHL2biWe+tYu/uO+V7nrhU07b/vmn1/jK2ct4vIT5+12rC46SUsEZvaIpLmjbHIecEs4e+WTkiol7WNmm5MVk8teb7b28/W/Ps/iGZP47wsOY1LJBO54bgM/qlvFudc/yoVHzeLzb19IVXnRiPvo7uvnd88Gj9nYsoPFMybytXMP4oT5VcycHNQA1jR28NjKRu5YuoEv3/ky37r/NS49bg4fOn4u1aPsO/4Yf3xhEzc9uobXtrQxpayQC4+azckLazh4xiQmlxbS3t3Hii1tPPTaVv700mY+8evnmD2llMtPnMf7j5yZUOLp6RvgTy9v4qZH1/Lyxu1MLC7g/5w4jzMXT2N+bTlFBfls2d7Fk2uauGPpBv7jvtf4wUMr+dDxc7j8xH2ZUlY44r77B4xbnljL9x54nZ7+AT5xyn5ccORsigvzuOauZXz93uXMnlLKGYtGWjLapZukzj4aJoJ7R2gauhf4ppk9Gl5/CPjicKtnSboCuAKgpqbmiNtvv33oJjmpvb2d8vLysTfMcmbGdY930NQtvnFiKRWFg7+cO3uNP67q4cF1fRTlw3sWFHLKrAIK4n5dd/Qaf9/QywNr+2jpNvablMd58ydwcHX+iE0mZsYbLQPcv6aX5+v7yc+DE2cUcPLMAuZMzCNvyOM2tw/w9JY+Hnqzj9YeY2a5ePvcCRy7TwGF+SP/0h8w47mt/fx5TS+rtg9QWgAnzSjgxJkTmFmut8S3qX2AR9Z18kR9Htu7jX3KxBlzJnDC9AKKCkY+zrrWfv60updntvRTmA+nzZ7AGXMKmFw82I1oZixr6uf3r/eypnWAxdX5fPDAQqaWDW7TO2Bc90QXHb3GN08qGfW5pYJ/RgadcsopS83syOHuy4hEEG/hwoW2YsWKZISbcXwelcA/3mjggz9/mm+8ZzEfOGbOsNusrG/ja/cs5x9vNFJZOoEj50ymvKiADdt28ML6FvoGjOP3q+LjS/bjxPnVu9VmvqqhnZ/9YzW/f24jPX0D1FYUsXjGJCpLJ9DZ3c+KrW2saQyWiD55/xo+etK+nDC/arfb5Zeua+bmx9fx55c30zdg1FYUccjMSipLJ9DR3cdrW4LjCDh5YQ0fPmEeJ82vJm83mpRe39rGD/+2knteCpp7Dp4xiXnVZfT0DfDC+hY2b+9i2sRivnLWgZx9yD7DPofHVzVy8U+f4rrzDuLS4+bu1nMcb/4ZGSQpLRPBT4A6M/tNeH0FsGSspiFPBIP8TR74v7c+y+NvbOXZa86kqCB/xO3MjLoVDdzz0iaWb2qlvbuPaROLOWLuZM45ZDqLZyTejzCcbR09PLyinodXNPDG1jbauvoonpDHvjXlHL9fFe84aBrTK0v26hgA9W1d1L3WwCNvNLCyvp2Wzl5Ki/LZr6ac4/atYnL7Gt5z5ql7dYw1jR3c/cImnlzdxJvNnRRNyGPh1ApOP3AqZ79tn1HLGeDcHz7Kjp5+HvjMP+1VR/Te8s/IoNESQZSzj94NXCnpNoJO4u3eP+B217aOHh58tZ63z5kw5peTJE45oJZTDqhNSiyTywr558Nn8s+HJ3ep39qKYs4/ahbnHzVr2Pvr6kacZDJh86rL+PTpC/g0C/bo8RcfPZur//Ayr2xs3a2OeheNpI0jkPQb4AlgoaQNki6X9DFJHws3uQ9YDawEfgr8S7Jicdnrr69upX/AOGba6EnApdaZi6dRkCfufXnT2Bu7yCXzrKGLxrjfgE8k6/guNzy4fCszKkuYMzHaTkm3q8rSQo7dt4qHXq3nS+88MOpw3Bh8ZLHLWAMDxlNrmveo49Ul38n717Cyvp1NLTuiDsWNwROBy1grtraxfUcvx8yrijoUN4yT9q8G4PFVTRFH4sbiicBlrKdWB18wx+w7JeJI3HD2r62goqiA59/cFnUobgyeCFzGempNMzMqS3aO+nXpJS9PHDq7kuffbIk6FDcGTwQuI5kZT69p9tpAmjtsViWvbWmls6cv6lDcKDwRuIy0aXsXTR09HDZ7ctShuFEcNnsyAwYvbdgedShuFJ4IXEZ6dVMrAIv28SmP09mhsyoBvHkozXkicBnp1c1BIlg4bWLEkbjRTC4rZE5VKS9taIk6FDcKTwQuI726pZW5VaWUF0U5S4pLxMKpFbw+wroOLj14InAZ6dXNbRy4j9cGMsH+UytY29RJd19/1KG4EXgicBmno7uPtU0dnggyxIKp5fQP2M6puF368UTgMs5rW9owwxNBhth/atCh//rW9ogjcSPxROAyzqr64Atl/6m+8lQm2LemjPw88Yb3E6QtTwQu46xp6mBCvpgxDou8uOQrKshnTlWpdxinMU8ELuOsaehg9pRSCvL97ZspFtSW84Y3DaUt/yS5jLO2qYN51WVRh+F2w4LaCtY2ddDbPxB1KG4YnghcRhkIzz7xRJBZZleVMmCwcZuvTZCOPBG4jLK5tYvuvgHmeiLIKHOmBDPErmvujDgSNxxPBC6jrA3PRfcaQWaZUxW8Xm82+ViCdOSJwGWU1Z4IMlJtRRFFBXm86TWCtOSJwGWUNQ0dFE/IY2pFcdShuN2QlydmTyllXZMngnTkicBllPXbOpk9pZS8PF+sPtPMnlLqNYI05YnAZZSN23b4QLIMNbsqSARmFnUobghPBC6jbNjW6WsUZ6g5U0rp7Omnsb0n6lDcEJ4IXMZo6+qltauPGZO9RpCJdp451OxnDqUbTwQuY2xsCQYjedNQZpoZJvANPqgs7XgicBljQ3PwBTLTawQZaZ8wgW9q6Yo4EjeUJwKXMXbWCDwRZKTyogImFhewebvXCNKNJwKXMTa27KCwII/qsqKoQ3F7aHplCZtaPBGkG08ELmNs2NbJzMoSH0OQwaZXlrDRm4bSTlITgaQzJa2QtFLS1cPcP1vSw5Kel/SSpHclMx6X2TZu2+HNQhluemWxNw2loaQlAkn5wPXAO4FFwEWSFg3Z7KvA7WZ2GHAhcEOy4nGZb2OLDybLdNMrS2jp7KWzpy/qUFycZNYIjgZWmtlqM+sBbgPOG7KNAbEVyCcBm5IYj8tgPX0DNLb3MG2SzzGUyaZP8jOH0lFBEvc9A1gfd30DcMyQba4FHpD0SaAMOH24HUm6ArgCoKamhrq6uvGONSO1t7fnTFk07QhWtmrZvI66urf+XsilshhLOpfF1uZ+AO5/5EkWVyfz6yeQzmWRTpL/SozuIuBmM/uepOOAWyUtNrNd1rMzsxuBGwEWLlxoS5YsSX2kaaiuro5cKYul67bB3x/n5KPexpIDat9yfy6VxVjSuSz2a+7kP59+mJo5+7PkqNlJP146l0U6SWbT0EZgVtz1meFt8S4HbgcwsyeAYqA6iTG5DFXfGjQlTJ3oTUOZbNqkYiT8zKE0k8xE8AywQNI8SYUEncF3D9nmTeA0AEkHEiSChiTG5DLUlp2JwMcQZLIJ+XnUVhSx2ccSpJWkJQIz6wOuBP4CvEpwdtAySddJOjfc7HPARyW9CPwGuMx8jlo3jK2t3UzIF1PKCqMOxe2l2opi6tu6ow7DxUlqH4GZ3QfcN+S2a+IuLwdOSGYMLjtsbe2itqIYyQeTZbqpE4u8aSjN+MhilxG2tnb5qaNZoqaieGefj0sPnghcRtjS2uX9A1li6sQimjp66O0fGHtjlxKeCFxGqG/t9jOGskRtRfA6Nng/QdrwRODSXnt3H+3dfZ4IskSsZucdxunDE4FLe1vD9uRpngiyQqxG4P0E6cMTgUt7W7cHXxi13keQFWI1gq1eI0gbI54+KullgknhhmVmhyQlIueG2NrmNYJsUlVeRJ6gwWsEaWO0cQRnh/8/Ef6/Nfz/geSF49xbbdke/HL0PoLskJ8nqsuL2NrqNYJ0MWIiMLN1AJLOCNcLiLla0nPAWxaacS4ZtrZ2UVFUQFlR1HMkuvFSO7GI+javEaSLRPoIJOmEuCvHJ/g458bF1tYupvpgsqxSW1HsNYI0kshPrMuBmyRNCq+3AB9JWkTODbHVB5NlnakTi3hpw/aow3ChMROBmS0F3hZLBGbmr55Lqa2t3Rwzb0rUYbhxVFNRTFNHN339AxTkewND1MZ8BSRNlfRz4DYz2y5pkaTLUxCbc5gZDe3d1FR4jSCbTJ1YhBk0tvdEHYojsbb+mwmmkp4eXn8duCpJ8Ti3i7buPnr6Bqgu90SQTWKDyrb6KaRpIZFEUG1mtwMDsHOdgf6kRuVcKDYfTXWFr0OQTXyaifSSSCLokFRFOLhM0rGA9xO4lGiMJQKvEWQVrxGkl0TOGvoswRKT+0l6DKgB3pfUqJwLxdqQvY8gu1SXFyJ5jSBdjJoIJOUDJ4d/CwEBK8ysNwWxOUdju9cIslFBfh5VZYU+FXWaGLVpyMz6gYvMrM/MlpnZK54EXCo1tneTJ5hc6n0E2aa6vGhnonfRSqRp6DFJPwR+C3TEbjSz55IWlXOhxvZuppQVkZ/naxVnG08E6SORRHBo+P+6uNsMOHXco3FuiIa2HqrLvTaQjarKC3nzzc6ow3AkNrL4lFQE4txwGn0wWdbyGkH6SGg6R0lnAQcBO2f+MrPrRn6Ec+Ojoa2bedVlUYfhkqC6vIjOnn46e/ooLfSZZaOUyBQTPwYuAD5JcNbQ+4E5SY7LOczMawRZLNbk19jm00xELZEBZceb2aXANjP7GnAcsH9yw3IuWLS+u2/A+wiyVOyU4MYObx6KWiKJYEf4v1PSdKAX2Cd5ITkXiA0m8zEE2WlnIvCxBJFLpGHuXkmVwHeA5wjOGPpZMoNyDnwwWbaLzR/lM5BGL5Gzhr4eXvy9pHuBYl+TwKWCzzOU3arKwhqBnzkUuTETgaRLh7kNM7slOSE5F9hZI/CZR7NSYUEek0om0OSJIHKJNA0dFXe5GDiNoInIE4FLqoa2YHqJ2C9Hl32qygu9aSgNJNI09Mn462F/wW2J7FzSmcB/A/nAz8zsm8Nscz5wLUHfw4tmdnEi+3bZr6G9hyllhT69RBarLi+iwWsEkduTURwdwLyxNgpnLr0eOAPYADwj6W4zWx63zQLgS8AJZrZNUu0exOOyVGN7t/cPZLma8iJe3dIadRg5L5E+gnsIF6UhON10EXB7Avs+GlhpZqvD/dwGnAcsj9vmo8D1ZrYNwMzqEw/dZTtPBNmvuryQJm8ailwiNYLvxl3uA9aZ2YYEHjcDWB93fQNwzJBt9gcIF7zJB641s/uH7kjSFcAVADU1NdTV1SVw+OzX3t6e1WWxoaGT+ZV5CT3HbC+L3ZFJZdHa0MP2Hb08+LeHKUhCE2AmlUWUEukj+HuSj78AWALMBB6RdLCZtQyJ4UbgRoCFCxfakiVLkhhS5qirqyOby6L9ofs5aL/ZLFmyaMxts70sdkcmlcWmkje5c+XLHHTEsewzqWTc959JZRGlRJqG2hhsGtrlLsDMbOIID90IzIq7PjO8Ld4G4KlwsZs1kl4nSAzPjBWXy24d3X3s6O2n2ucZymrx8w0lIxG4xCQyxcT3gasJmnpmAl8Evm9mFaMkAQi+zBdImiepELiQYO3jeHcR1AaQVE3QVLR6N+J3WSo2hqDG+wiyWizR+3xD0UokEZxrZjeYWZuZtZrZjwg6fUdlZn3AlcBfgFeB281smaTrJJ0bbvYXoEnScuBh4Atm1rRnT8Vlk9hatl4jyG7VZT7fUDpIpLO4Q9IHCMYOGHARcUtWjsbM7gPuG3LbNXGXDfhs+OfcToPzDPmo4mzm8w2lh0RqBBcD5wNbw7/3h7c5lzQN4ReDNw1lt9LCAkoL832+oYglctbQWhJoCnJuPDW2dSPBlDKvEWS76vIin28oYomsUPZtSRMlTZD0kKQGSZekIjiXu5o6uplcWkhBfiKVVpfJfL6h6CXyKXu7mbUCZwNrgfnAF5IZlHONbT1UeW0gJ/gi9tFLJBHEmo/OAn7naxG4VGjq8OklcoUnguglkgjulfQacATwkKQaoCu5Yblc19jeQ5WfMZQTasoLae7ooX9guHGrLhXGTARmdjVwPHBkOAK4E+88dknW2OY1glxRVV7EgMG2Tu8niEpCPXFm1mxm/eHlDjPbktywXC7r6u2nrbvPxxDkiJ2L2HvzUGT8lAyXdpo6gl+GXiPIDfHzDbloeCJwaSd2TnmVJ4KcsHO+Ia8RRCaRcQSSdImka8LrsyUdnfzQXK7y6SVyy875hjwRRCaRGsENwHEEcwwBtBEsQelcUsQGF3nTUG6YWFJAYX6eDyqLUCKTzh1jZodLeh4gXFvYf6q5pGnc2TTkb7NcICkcXew1gqgkUiPoDReiN4BwHMFAUqNyOa2pvYfSwnxKCxP5neKygQ8qi1YiieAHwJ1AraRvAI8C/5HUqFxO80Xrc0+11wgilcjso/8raSlwGsHylO82s1eTHpnLWU0+qjjnVJUX8dqWtqjDyFkjJgJJU+Ku1gO/ib/PzJqTGZjLXY3t3cyaUhp1GC6FgqmoezAzJEUdTs4ZrUawlKBfQMBsYFt4uRJ4E5iX7OBcbmps7+Gw2ZVRh+FSqLq8kJ7+AVp39DGpdELU4eScEfsIzGyeme0LPAicY2bVZlZFMB31A6kK0OWW/gGj2WcezTk14aCyBu8niEQincXHhmsPA2BmfyaYhM65cdfS2cOA4WsR5JgqH1QWqUTOz9sk6avAr8LrHwA2JS8kl8t2Diar8BpBLoktYt/kg8oikUiN4CKghuAU0juBWgZHGTs3rnYOJivzRJBLfAbSaCVy+mgz8OkUxOLczi+CmgpvGsolk0sLyZMngqiMmQgkPUw4qjiemZ2alIhcTos1DXmNILfk54kpZT6oLCqJ9BF8Pu5yMfBeoC854bhc19TeTUGemFTipxDmmuryIhp8TYJIJNI0tHTITY9JejpJ8bgc19jezZSyQvLyfFBRrqkuL6Kpw2sEUUikaSh+hHEewSL2k5IWkctpTe09PoYgR1WXF7LuzY6ow8hJiTQNxY8w7gPWAJcnMyiXuxrbu/3U0RxVXV7ky1VGJJFEcKCZdcXfIMk/qS4pGtt72K+mPOowXASqyovY0dtPR3cfZUU+BXkqJTKO4PFhbntivANxzsy8RpDDdi5i72cOpdyIiUDSNElHACWSDpN0ePi3BEhoakhJZ0paIWmlpKtH2e69kkzSkbv7BFz26Ojpp7tvwKeXyFGDi9h781CqjVb/egdwGTAT+K+429uAL4+143BVs+uBM4ANwDOS7jaz5UO2qyAYsPbUbkXusk5jW2zReq8R5KIaH10cmRETgZn9EvilpPea2e/3YN9HAyvNbDWApNuA84DlQ7b7OvAt4At7cAyXRWKnDvqiNLmpypuGIjPawjSXmNmvgLmSPjv0fjP7r2EeFm8GsD7u+gbgmCHHOByYZWZ/kuSJIMfFBhN5jSA37ZyB1M8cSrnRmobKwv9JOYVDUh5Bk9NlCWx7BXAFQE1NDXV1dckIKeO0t7dnVVk8/mYvAG+8vJTGNxI5j2FQtpXF3sjksiibAC++vpq6go3jsr9MLotUGq1p6Cfh/6/t4b43ArPirs8Mb4upABYDdeHSdNOAuyWda2bPDonlRuBGgIULF9qSJUv2MKTsUldXRzaVxYsPvgHLX+es05dQWLB7iSDbymJvZHJZTFtaR/GkCpYsOWJc9pfJZZFKiYwsrgE+CsyN397MPjLGQ58BFkiaR5AALgQujnv8dqA67jh1wOeHJgGXOxrbu5lUMmG3k4DLHlU+qCwSiYza+CPwD4IlK/sT3bGZ9Um6EvgLkA/cZGbLJF0HPGtmd+9JwC57NXV07zyX3OWmmvIiXt3cGnUYOSeRRFBqZl/ck52HS1zeN+S2a0bYdsmeHMNlj8a2Hqq8ozinVZcX+rrFEUikDn6vpHclPRKX8xrau3cuYu5yU3V5EW1dfXT1Jtz44MZBIong0wTJYIekVkltkrzu5sZdfWsXtZ4IclpsdHFzh/cTpFIi6xFUpCIQl9s6uvvo6OmntqI46lBchGLTizS2dzO9siTiaHJHImcNHT7MzduBdWbmK5W5cVEfTi/hNYLcNjjfkPcTpFIincU3AIcDL4fXDwZeASZJ+riZPZCs4FzuqG8NZjqvneiJIJftnG/ITyFNqUT6CDYBh5nZEWZ2BHAosJpgMrlvJzE2l0MGawTeNJTLYtOL+JlDqZVIItjfzJbFroSzhx4Qm0zOufHgTUMOoKQwn4rigp01RJcaiTQNLZP0I+C28PoFwPJwlbLepEXmckp9WxeF+XlUlk6IOhQXsakTi9na6jWCVEqkRnAZsBK4KvxbHd7WC5ySnLBcrmloDcYQhPNOuRw2dWIRW9u8RpBKiZw+ugP4Xvg3VPu4R+RyUn2bDyZzgakVxTy1pjnqMHJKIqePLgD+E1gE7OzJM7N9kxiXyzH1bV3MrSobe0OX9WonFlPf1oWZeQ0xRRJpGvoF8COgj6Ap6BbgV8kMyuWe+rZuP3XUAUHTUG+/sa3TuyBTJZFEUGJmDwEys3Vmdi1wVnLDcrmku6+fls5eP3XUAUFnMcBWP3MoZRJJBN3hamJvSLpS0ntI0qplLjc1+KmjLs7UsGboiSB1Ep10rhT4FHAE8EHgQ8kMyuWWnWMIvGnIMTiosN5PIU2ZRM4aeia82A58OLnhuFwU+8B705CDwR8EXiNInRETgaRRVxAzs3PHPxyXixrCc8a9acgBFBXkM7l0go8lSKHRagTHAeuB3wBPAX4el0uK+rZu8oSvTuZ28tHFqTVaIphGMLHcRQSLzv8J+E38vEPOjYf61m6qy4vIz/PfGi5QO7HY5xtKoRE7i82s38zuN7MPAccSTDNRFy5I79y4qW/r8o5it4upFUVeI0ihUTuLw4nlziKoFcwFfgDcmfywXC7ZvL2LmZN9NSo3aOrEYhrau+kfMK8ppsBoncW3AIuB+4CvmdkrKYvK5ZQtrV0cOXdy1GG4NDJ1YhH9A0ZzR4/PQZUCo40juARYQDCO4PFw4XpfvN6Nqx09wajifSZ5jcANqvXRxSk1Yo3AzBIZbObcXtm8fQcA+0zyMQRuUGyaifq2LmBStMHkAP+yd5HavD34xec1AhcvNs3Elu3eYZwKnghcpGKJYHql1wjcoJrwdOJYjdEllycCF6nNLcEHPdYU4BxAQX4e0yYWs7HFE0EqeCJwkdq0vYuqskKKJ+RHHYpLM9Mri9nkiSAlPBG4SG3ZvoNp3lHshjG9soRNLX7WUCp4InCR2ry9yzuK3bCmV5awefsOBgYs6lCynicCF6kgEXiNwL3V9MoSevuNhnY/cyjZkpoIJJ0paYWklZKuHub+z0paLuklSQ9JmpPMeFx66ezpY/uOXvbxM4bcMGZWBjVF7zBOvqQlAkn5wPXAO4FFwEWSFg3Z7HngSDM7BLgD+Hay4nHpZ31z8AGfObk04khcOpoeJgLvME6+ZNYIjgZWmtlqM+sBbgPOi9/AzB42s87w6pPAzCTG49LM+ubgpZ/lE865YcTGlmzc5okg2cZcqnIvzCBY2CZmA3DMKNtfDvx5uDskXQFcAVBTU0NdXd04hZjZ2tvbM7osHl7bC8D6V19g++q9m2Ey08tiPGVTWZQUwNPLVrLQ1o+98TCyqSySKZmJIGGSLgGOBE4e7n4zuxG4EWDhwoW2ZMmS1AWXxurq6sjksnjknuWUTHiTc96+BGnvEkGml8V4yqaymPPCI6ishCVLjtqjx2dTWSRTMhPBRmBW3PWZ4W27kHQ68BXgZDPz0wNyyPptncyaUrLXScBlr5mTS3c2IbrkSWYfwTPAAknzJBUCFwJ3x28g6TDgJ8C5ZlafxFhcGlrf3Mks7yh2o5hTVcq65g7MfCxBMiUtEZhZH3Al8BfgVeB2M1sm6TpJ54abfQcoB34n6QVJd4+wO5dlzIwN23Ywa4onAjeyuVWldPUOUN/mjQXJlNQ+AjO7j2CFs/jbrom7fHoyj+/SV0tnL+3dfb5EpRvV7KoyANY1dfrEhEnkI4tdJNZvC08d9RqBG8Wc8P2xrqkj4kiymycCF4nYYDLvI3CjmTG5hPw8sa7JO4yTyROBi8SaxnYA5lZ7InAjm5Cfx4zKEtb5mUNJ5YnARWJVQwfTJxVTWpgWQ1lcGptTVcqb3jSUVJ4IXCRWNbSzX2151GG4DDCnqpS13jSUVJ4IXMqZGasbOtivxhOBG9vcqjK27+iluaMn6lCylicCl3L1bd20d/exb01Z1KG4DDA/rDm+sbUt4kiylycCl3KrGoKOYq8RuETsP7UCgNfr2yOOJHt5InApt6oh6PjzGoFLxD6TiqkoKvAaQRJ5InApt6q+ndLCfKb5SFGXAEnMn1rOii2eCJLFE4FLuTfq25hfW+6zjrqE7V9bwRveNJQ0nghcSpkZyza1ctD0iVGH4jLIgqnlNHf00OgL2SeFJwKXUhtbdtDS2cui6ZOiDsVlkJ0dxt5PkBSeCFxKLdvUCsBirxG43XDAPkEiWB6+f9z48kTgUmrZxu3kCQ6Y5onAJa62opgZlSW8sL4l6lCykicCl1LLNrUyv7acksL8qENxGeZtsybx4oaWqMPISp4IXEoFHcXeP+B239tmVrK+eQdN3mE87jwRuJTZsK2TLa1dHDLTE4HbfYfOqgTwWkESeCJwKfPU6mYAjtuvKuJIXCZaPGMSeYIX3myJOpSs44nApcyTq5uYXDqB/Wsrog7FZaCyogIO3GciT69tjjqUrOOJwKXMk2uaOGZeFXl5PqLY7ZkTF1SzdN022rv7og4lq3gicCmxYVsn65t3cOy+U6IOxWWwk/evobffeGJVU9ShZBVPBC4lHl7RAMAJ86sjjsRlsiPnTKG0MJ+/v14fdShZxROBS4l7X9zE/NrynYuMOLcnCgvyOH6/aupWNGBmUYeTNTwRuKTb2trF02ubOfuQfXzGUbfX3nHQVDZs28HSdduiDiVreCJwSXffy5sxg7MPmR51KC4LvOvgfSgrzOe3z6yPOpSs4YnAJZWZ8eun3mTxjIneLOTGRVlRAee8bTr3vrSZtq7eqMPJCp4IXFL97bV63qhv58PHz4s6FJdFLjp6Njt6+/nl42ujDiUreCJwSdPbP8C371/B3KpSzj3Um4Xc+HnbrErecdBUbqhbRX1bV9ThZDxPBC5pvv/g66zY2sZXzlrEhHx/q7nx9aV3Hkhv/wBf/sPL9A/4GUR7I6mfTklnSlohaaWkq4e5v0jSb8P7n5I0N5nxuNQwM37+6Bquf3gV5x85kzMWTY06JJeF5laX8a9nL+LBV+v56l0v09M3EHVIGasgWTuWlA9cD5wBbACekXS3mS2P2+xyYJuZzZd0IfAt4IJkxeSSq6Wzh2fXbuOmx9bw+Komzlg0la+/e3HUYbksdulxc9myvYsb6lbxwvrt/N9/2peTFlRTVV4UdWgZJWmJADgaWGlmqwEk3QacB8QngvOAa8PLdwA/lCQbZaTIxvYBTv1e3fB3jlE7HKvyONYAlbEfP9bxx9j/KHcPd19XVxfFT/5tjKhij0/uc+vs6aO1K5j/ZXLpBP793Yu5+OjZPq+QS7r/d+YBHDZ7Mtfdu4yrfvsCABVFBVQUFzDQ203p0rqd28a/G6Mc05Jug+GSmQhmAPEn+m4AjhlpGzPrk7QdqAIa4zeSdAVwBUDZ1DlU54/cOTTWS7u3r/2YDx9jA42xwe6E11c4QEHB4OlzYz23vX3bj7b/CXlQU1LIzApxwJR8CrrW8Mgja/byiIlrb2+nrq4uZcdLZ7lYFhOArx0lVrUUs6plgKauATp7+9jRM0DBMN8X8V/DZnv/vbAn0uknUjITwbgxsxuBGwEWLlxot191ZsQRpYe6ujqWLFkSdRhpwctiUC6XxalDrudyWQylz4x8XzI7izcCs+KuzwxvG3YbSQXAJMCnFXTOuRRKZiJ4BlggaZ6kQuBC4O4h29wNfCi8/D7gb6P1DzjnnBt/SWsaCtv8rwT+AuQDN5nZMknXAc+a2d3Az4FbJa0EmgmShXPOuRRKah+Bmd0H3DfktmviLncB709mDM4550bnwz2dcy7HeSJwzrkc54nAOedynCcC55zLccq0szUltQEroo4jTVQzZBR2DvOyGORlMcjLYtAcM6sZ7o6MGFk8xAozOzLqINKBpGe9LAJeFoO8LAZ5WSTGm4accy7HeSJwzrkcl4mJ4MaoA0gjXhaDvCwGeVkM8rJIQMZ1FjvnnBtfmVgjcM45N448ETjnXI5L20TgC98PSqAsPitpuaSXJD0kaU4UcabCWGURt917JZmkrD11MJGykHR++N5YJunXqY4xVRL4jMyW9LCk58PPybuiiDNtmVna/RFMW70K2BcoBF4EFg3Z5l+AH4eXLwR+G3XcEZbFKUBpePnjuVwW4XYVwCPAk8CRUccd4ftiAfA8MDm8Xht13BGWxY3Ax8PLi4C1UcedTn/pWiPYufC9mfUAsYXv450H/DK8fAdwmqJcjTp5xiwLM3vYzDrDq08SrAaXjRJ5XwB8HfgWMPLi1pkvkbL4KHC9mW0DMLP6FMeYKomUhQETw8uTgE0pjC/tpWsiGG7h+xkjbWNmfUBs4ftsk0hZxLsc+HNSI4rOmGUh6XBglpn9KZWBRSCR98X+wP6SHpP0pKRsXew7kbK4FrhE0gaCNVI+mZrQMkMmTjHhRiDpEuBI4OSoY4mCpDzgv4DLIg4lXRQQNA8tIaglPiLpYDNriTKoiFwE3Gxm35N0HMHKiIvNbCDqwNJButYIfOH7QYmUBZJOB74CnGtm3SmKLdXGKosKYDFQJ2ktcCxwd5Z2GCfyvtgA3G1mvWa2BnidIDFkm0TK4nLgdgAzewIoJpiQzpG+icAXvh80ZllIOgz4CUESyNZ2YBijLMxsu5lVm9lcM5tL0F9yrpk9G024SZXIZ+QugtoAkqoJmopWpzDGVEmkLN4ETgOQdCBBImhIaZRpLC0TQdjmH1v4/lXgdgsXvpd0brjZz4GqcOH7zwIjnkqYyRIsi+8A5cDvJL0gaeiHICskWBY5IcGy+AvQJGk58DDwBTPLulpzgmXxOeCjkl4EfgNclqU/HPeITzHhnHM5Li1rBM4551LHE4FzzuU4TwTOOZfjPBE451yO80TgnHM5zhOBc87lOE8EzjmX4zwRZJlwDv7vxV3/vKRrUxxDe9zlx8dhf9dK+vwI9/WHg+hif3P39nhRklQi6e+S8tMgll3KXdKPJZ0QQRztY9xfKOmRcKoZtwc8EWSfbuCfwykFdosC4/qeMLPjx3N/w9hhZofG/a2N3ZGM55MCHwH+YGb9AJJqJVXEbyBp/p7ufC/L5FiCaTvSSjj19EPABVHHkqky7UPixtZHsAjHZ4beEa5k9kr4d1V429xwZadbgFeAkyS9JulmSa9L+l9Jp4dTGb8h6ei4/d0laWm4+tUVwwUT+zUn6WNxv9rXSHo4vP0SSU+Ht/8k9ktY0lfC4z8KLEz0yQ/zfGaNdIyhx5H0m7AGNVfSK3Hb7KxVDbevcPtXJf00LIsHJJXEPf5SBativSjp1nDqg6vi7v+GpE+HVz8A/DHuKZ0M3CWpKNz2o8D/hJf3k9QgaW0YT7OkVZImxj1+pDIZ9rUbqdwVzM/zupn1SyqT9Kfw+bwi6YJwm7fsMzz2mO+nuO3+NyzLOySVDvP6jvRa3hWWndsTUa+M43/j+we0EyzAsZZgRtbPE8zFfgTwMlBGMC/RMuAwYC4wABwbPn4uQTI5mOCHwlLgJkAEi33cFXesKeH/EoIvmKpYDPHxDIlvAvAP4BzgQOAeYEJ43w3ApXGxlobPZSXw+RGebz/wQvh35zDPZ9hjhJeHPU64j1fijhErw5HijZXZoeHttwOXhJcPIpj1szpWZuH2z4XX8whW16oiWF1ryzDP8f8x+EX3BFAed9+dwEnh5Trg4GEev0uZjPTajVbuBPN5fSS8/F7gp3H7mjTKPmNlM+r7KdzOgBPC6zfFHbs9gdcyH2iI+vOXqX/eppaFzKw1/PX3KWBHePOJwJ1m1gEg6Q/ASQSzNK4zs/gq/xozezncbhnwkJmZpJcJPrAxn5L0nvDyLIIpjsea1Oy/CWaKvUfSlQRfPs8oWFyuBKgn+LK808JV1zT6JHo7zOzQ2BUFfQTxz+e0EY5B+PwTPc5o+3qEoMxeCLdbymA5nQr8zswaAcysGWiW1KRg1tipwPNm1iRpOtAy9KBm9m1JtwE/AvYzs/g284MIvnQh+KJcMULsQ1/j4V67Yxm5PN4BfDi8/DLwPUnfAu41s3+Mss8tJP5+Wm9mj4WXf0Xw/v1u3P0jvpYW1FR6JFWYWdsIZeBG4Ikge30feA74RQLbdgy5Hr+ewUDc9QHC94ykJcDpwHFm1impjmBq3xFJugyYQzBTJAS/Cn9pZl8ast1VCcQ8mvjnM+wxxtDHrs2msec1Urxz2bXM+gm+pEbzM4IFdKYR/PqFIGm/pQwlnUSwzsKdwL8Rll/Y/FRsZtskzQIaLWgvH87OMtnd1y5soqk0s00AZva6gpXg3gX8u6SHCJLhSPsc8/0UGjoD5tDrY72WRWT38qRJ430EWSr85Xk7wYIcEDTHvFtSqaQy4D3hbXtqErAt/NAfQPBrckSSjiBoYrnEBleFegh4n6TacJspkuYQfKm8W8EZNBUEzUh7aqRjMMpxtgK1kqrCtvmzE9jXSP4GvF9SVewx4e13AmcCRxFMn4wFawvnS9r5pRzWGm4kaEb5MMHU6/8e3r2IYNplCGoDsctjGem1G6k8TiGYxjoW03Sg08x+RTAF+uGj7HN3zFawehjAxcCjQ+4fsfzD8m00s949OG7O8xpBdvse4a9HM3tO0s3A0+F9PzOz57Xnp1veD3xM0qsEzRFjnU1yJUGTz8Nhtf5ZM/s/kr4KPKDgTJZe4BNm9qSk3wIvElT9n9nDGDGz5cMdg6Cp5LnhjmNmvZKuIyirjcBrY+xryyjHXybpG8DfJfUDzxPMhd+joMO8xcIzhEIPEDTjPRheLwXON7NVEHQ8M7gUZ3yz0A7gcEkHmNlrYxTLsK/dSOUBvBO4I+7xBwPfkTQQlsHHCZqLduf9MJwVwCck3QQsJ2gK22m015IgWWX7OtVJ4+sROBdScGZQu5l9d6xtx+FYeQRNd+83szfibj8c+IyZfTDZMSRK0nPAMcn8tR3+ILnXzBbv4eP/AFxtZq+Pa2A5wpuGnEsxSYsIzsh5KD4JQPCrnKDWFPmAshgzOzydm1wULE95lyeBPec1Auecy3FeI3DOuRznicA553KcJwLnnMtxngiccy7HeSJwzrkc54nAOedynCcC55zLcf8fDZPbZxNuNpoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 51 #n表示点数，实际FIR滤波器的阶数为50\n",
    "f = np.array([0,0.3,0.4,0.7,0.8,1]) \n",
    "m = np.array([0,1,0]) \n",
    "b = signal.remez(n,f,m,Hz=2) \n",
    "w,h = signal.freqz(b,1)  \n",
    "fig,ax = plt.subplots()   \n",
    "ax.plot(w/np.pi,np.square(np.abs(h)));ax.grid()   \n",
    "ax.set_ylabel('Magnitude squared')   \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')   \n",
    "ax.set_title('Magnitude Response(squared)')   \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf26bf91",
   "metadata": {},
   "source": [
    "以下为高通和带阻滤波器的示例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "91e61925",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 51  \n",
    "f = np.array([0,0.7,0.8,1])  \n",
    "m = np.array([0,1])  \n",
    "b = signal.remez(n,f,m,Hz=2)  \n",
    "w,h = signal.freqz(b,1)   \n",
    "fig,ax = plt.subplots()    \n",
    "ax.plot(w/np.pi,np.square(np.abs(h)));ax.grid()    \n",
    "ax.set_ylabel('Magnitude squared')    \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')    \n",
    "ax.set_title('Magnitude Response(squared)')    \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "17052d93",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 17 \n",
    "f = np.array([0,0.3,0.4,0.5,0.8,1])   \n",
    "m = np.array([1,0,1])  \n",
    "b = signal.remez(n,f,m,Hz=2)   \n",
    "w,h = signal.freqz(b,1)    \n",
    "fig,ax = plt.subplots()     \n",
    "ax.plot(w/np.pi,20*np.log10(np.abs(h)));ax.grid()     \n",
    "ax.set_ylabel('Magnitude(dB)')     \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')     \n",
    "ax.set_title('Magnitude Response(dB)')   \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a784192",
   "metadata": {},
   "source": [
    "以下是多频带带通滤波器的示例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "202b8776",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 51  \n",
    "f = (np.array([0,0.1,0.15,0.25,0.3,0.4,0.45,0.55,0.6,0.7,0.75,0.85,0.9,1]))\n",
    "m = np.array([1,0,1,0,1,0,1])   \n",
    "b = signal.remez(n,f,m,Hz=2)    \n",
    "w,h = signal.freqz(b,1)    \n",
    "fig,ax = plt.subplots()     \n",
    "ax.plot(w/np.pi,np.square(np.abs(h)));ax.grid()     \n",
    "ax.set_ylabel('Magnitude squared')     \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')     \n",
    "ax.set_title('Magnitude Response(squared)')     \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fed7d9e4",
   "metadata": {},
   "source": [
    "2. 权重向量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0c08ccec",
   "metadata": {},
   "source": [
    "**firls**和**firpm/remez**都允许您有所侧重地将某些频带的误差降至最低。为此，请在频率和幅值向量后指定权重向量。在以下低通等波纹滤波器示例中，阻带中的波纹比通带中的小10倍。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d3b88d8b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 21  \n",
    "f = np.array([0,0.4,0.5,1])    \n",
    "m = np.array([1,0])   \n",
    "w = np.array([1,10])\n",
    "b = signal.remez(n,f,m,w,Hz=2)    \n",
    "w,h = signal.freqz(b,1)   \n",
    "fig,ax = plt.subplots()    \n",
    "ax.plot(w/np.pi,20*np.log10(np.abs(h)));ax.grid()    \n",
    "ax.set_ylabel('Magnitude(dB)')    \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')    \n",
    "ax.set_title('Magnitude Response(dB)')    \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f33b1f76",
   "metadata": {},
   "source": [
    "合法权重向量始终是f和a向量长度的一半；每个频带只能有一个对应权重。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77662b37",
   "metadata": {},
   "source": [
    "3. 反对称滤波器/Hilbert 变换器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ee00d5f",
   "metadata": {},
   "source": [
    "当用尾部`'h'`或`'Hilbert'`选项调用时，**firpm/remez**和**firls**会设计奇对称的FIR滤波器，即III类（偶数阶）或IV类（奇数阶）线性相位滤波器。理想的Hilbert变换器具有这种反对称属性，且在整个频率范围内幅值为1。尝试以下逼近Hilbert变换器，并对其绘图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "739caadc",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\lenovo\\AppData\\Local\\Temp/ipykernel_21112/4173026939.py:8: RuntimeWarning: divide by zero encountered in log10\n",
      "  ax.plot(w1/np.pi,20*np.log10(np.abs(h1)),label='Highpass')\n",
      "C:\\Users\\lenovo\\AppData\\Local\\Temp/ipykernel_21112/4173026939.py:9: RuntimeWarning: divide by zero encountered in log10\n",
      "  ax.plot(w2/np.pi,20*np.log10(np.abs(h2)),label='Bandpass')\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "b = (signal.remez(22,np.array([0.05,1]),\n",
    "np.array([1]),Hz=2,type='hilbert'))\n",
    "bb = (signal.remez(21,np.array([0.05,0.95]),\n",
    "np.array([1]),Hz=2,type='hilbert'))\n",
    "w1,h1 = signal.freqz(b,1)\n",
    "w2,h2 = signal.freqz(bb,1)\n",
    "fig,ax = plt.subplots()    \n",
    "ax.plot(w1/np.pi,20*np.log10(np.abs(h1)),label='Highpass')\n",
    "ax.plot(w2/np.pi,20*np.log10(np.abs(h2)),label='Bandpass')\n",
    "ax.grid();ax.legend()\n",
    "ax.set_ylabel('Magnitude(dB)')    \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')    \n",
    "ax.set_title('Magnitude Response(dB)')    \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd8aa868",
   "metadata": {},
   "source": [
    "通过这些滤波器，您可以求得信号x的延迟Hilbert变换。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "b2fabb29",
   "metadata": {},
   "outputs": [],
   "source": [
    "fs = 1000\n",
    "t = np.arange(0,2+1/fs,1/fs)\n",
    "x = np.sin(2*np.pi*300*t)\n",
    "zi = signal.lfilter_zi(bb,1)*0\n",
    "xh,_ = signal.lfilter(bb,1,x,zi=zi)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca1ecb6d",
   "metadata": {},
   "source": [
    "对应于x的分析信号是以x为实部、以x的Hilbert变换为虚部的复信号。对于这种FIR方法（hilbert函数的替代方法），您必须将x延迟一半滤波器阶数才能创建分析信号："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "99eee31e",
   "metadata": {},
   "outputs": [],
   "source": [
    "xd = np.hstack((np.zeros(10),x[:len(x)-10]))\n",
    "xa = xd+xh*(1j)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75b376b9",
   "metadata": {},
   "source": [
    "这种方法不能直接用于奇数阶滤波器，因为奇数阶滤波器需要非整数延迟。在这种情况下，Hilbert变换中所述的hilbert函数可估算解析信号。或者，使用**resample**函数将信号延迟非整数个样本。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b16a5ff",
   "metadata": {},
   "source": [
    "4. 微分器"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf031f8a",
   "metadata": {},
   "source": [
    "信号在时域中的微分等效于信号的傅里叶变换乘以虚斜坡函数。也就是说，要对信号求导，请将其传递给具有响应$H(\\omega)=j\\omega$的滤波器。使用**firpm/remez**或**firls**和`'d'`或`'differentiator'`选项逼近理想的微分器（有延迟）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "8d814d40",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEaCAYAAAAcz1CnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAy60lEQVR4nO3dd3xUZfb48c8hJBAIRSD0EjAQCCBVVGygsqKi6M+GHXXF1XVd27q6oijqrn2/rHWxrF1kWUFQRBGJgI3ek0DovYVAEtJzfn/cGxliygCZ3JnMeb9e88ptc++ZZyZz5nnuvc8jqooxxpjwVcvrAIwxxnjLEoExxoQ5SwTGGBPmLBEYY0yYs0RgjDFhzhKBMcaEOUsEpsYSkVUiMqgK97dRRM6rqv0ZEywsEZiAcL8080WkWanlS0RERSQu0DGoandVTXKP+7iIfBjoY5ZFRAaJSLGIZIlIpoikisjNXsRiTFksEZhA2gBcUzIjIj2Bet6F46ntqhoDNATuBd4UkQSPYzIGsERgAusD4Eaf+ZuA9303EJGL3FrCQRHZIiKPl1p/o4hsEpF9IvKob/OM+yt/ooi87/7SXiUi/X2eu1FEzhORocDfgKvdX+XLfNf7bH9ErUFEbvA59iOl4qolIg+JyDp3/UQRaVJZgahjOpAOnFTZvkSkroh86C7PEJEFItLCXZckIv8Qkflu+X3uG4OIXOKWSYa7bbdSZfOAiCwXkQMi8qmI1HXXNRORL9znpYvIXBGp5a5rLSL/E5E9IrJBRO6u7DWb4GeJwATSz0BDEekmIhHACKB080w2TrJoDFwE3CEilwKISCLwGnAd0ApoBLQp9fxLgAnu86cCr5QOQlVnAH8HPlXVGFXtVVng7rFfB24AWgNNgbY+m/wJuBQ4212/H3jVj/3WEpFLgGZAmh/7ugnndbdzY/gDkOOzyxuBW3DKpxD4l3ucLsAnwD1ALDAdmCYiUT7PvQoYCnTESUoj3eX3A1vd57XASaLqJoNpwDKc9+Fc4B4ROb+y122CmyUCE2gltYIhQDKwzXelqiap6gpVLVbV5ThfXme7q68ApqnqPFXNBx4DSneONU9Vp6tqkXusSr/k/XQF8IWqzlHVPOBRoNhn/R+AR1R1q7v+ceAKEaldzv5ai0gGzpf4ZOA+VV3ix74KcBJAvKoWqeoiVT3os98PVHWlqma7MV7lJt2rgS9VdaaqFgAvANHAQJ/n/ktVt6tqOs4XfG93eQFOYumgqgWqOledTslOBmJVdayq5qvqeuBNnARvQpglAhNoHwDX4vzafL/0ShE5RURmu00NB3C+FEtOMLcGtpRsq6qHgH2ldrHTZ/oQULeCL+OjUfrY2aWO3QGY7DafZOAkuSKcX9Bl2a6qjXHOEfwLOMfPfX0AfA1MEJHtIvKciET6PHeLz/QmIBKn/Fq78yXxF7vb+taoSpddjDv9PE5t5RsRWS8iD/nE2bokTjfWv1Xwmk2IsERgAkpVN+GcNL4Q+KyMTT7GadJpp6qNgDcAcdftwKc5RkSicX4dH1MoZSzL5siT1y19pnfgNMeUHLteqWNvAS5Q1cY+j7qqekSN5zdBOL/4/wr0LGkCq2hf7i/yJ1Q1EefX/DCOPO/Szme6Pc6v+b3Adpwv7pL4xd22wvjcGDNV9X5V7YTT9HafiJzrxrmhVJwNVPXCyvZpgpslAlMdbgXOcX9Vl9YASFfVXBEZgFN7KDEJuFhEBrpt249zOEkcrV1AXMlJT9dSYISIRLonma8odexhInKGe+yxHPn/8gbwtIh0ABCRWBEZ7k8gbjPXizhNXRXuS0QGi0hPt7nnIM4XvW8T1fUikugmqrHAJLeZbCJwkYic69Yg7gfygB8ri09EholIvJs8DuDUToqB+UCmiPxVRKJFJEJEeojIyf68bhO8LBGYgFPVdaq6sJzVdwJjRSQT54txos/zVuGcSJ2A8ws9C9iN84V2tP7r/t0nIovd6UeBE3FOzj6BUzvxPfYf3WU73G22+uxvHE5N5hs39p+BU44inneA9iJycSX7aomTlA7iNBl9j9NcVOID4F2cZp66wN1u/KnA9cDLODWEi4GL3SRUmc7Atzjl/RPwmqrOdhPMMJxzCRvc/b6FczLbhDCxgWlMqBCRGCAD6KyqGzwOx3MikgR8qKpveR2LCW1WIzBBTUQuFpF6IlIf58qXFcBGb6MypmaxRGCC3XCcE5/bcZosRqhVY42pUtY0ZIwxYc5qBMYYE+aq4sabatW4cWONj4/3OoygkJ2dTf369b0OIyhYWRxmZXEkKw/HokWL9qpqbFnrQi4RtGjRgoULy7sSMbwkJSUxaNAgr8MIClYWh1lZHMnKwyEim8pbZ01DxhgT5iwRGGNMmLNEYIwxYc4SgTHGhDlLBMYYE+YsERhjTJizRGCMMWEu5O4jMMYYU7m9WXms3ZXFxn3ZpGdX3Pu4JQJjjKkBiouV+RvT+WL5dn5M28f6vWWNA1U2SwTGGBPC0rPzef+njXy6YAs7DuQSHRnBwBObcvXJ7Uhs3ZCOzerTLKYO0c+Wvw9LBMYYE4L2ZObxWlIaE+ZvIaegiLO7xPLQBV0ZktiCelFH99VuicAYY0JIbkER7/ywgddmryO3oIjhvdtw+9md6NKiwTHvM2CJQETqAnOAOu5xJqnqmFLb1AHeB/oB+4CrVXVjoGIyxphQ9mPaXh76bAWb0w8xJLEFD1/QlU6xMce930DWCPKAc1Q1S0QigXki8pWq/uyzza3AflWNF5ERwLPA1QGMyRhjQk5mbgH/+CqFj3/ZTFzTenz8+1MYGN+syvYfsETgDieY5c5Guo/Sw6ENBx53pycBr4iI2FCExhjjWLQpnT99vISdB3MZdVYn7j2vC9FREVV6jIAOVSkiEcAiIB54VVX/Wmr9SmCoqm5159cBp6jq3lLbjQJGAcTGxvabOHFiwGIOJVlZWcTEHH+1sCawsjjMyuJIoVoeqso3mwqZmJpP02jh9pPqcGLjY08AgwcPXqSq/ctaF9CTxapaBPQWkcbAZBHpoaorj2E/44HxAAkJCWqDTDhswI3DrCwOs7I4UiiWR2ZuAQ9OWs5XKTs5v3sLnr+yFw3rRgbseNVy1ZCqZojIbGAo4JsItgHtgK0iUhtohHPS2BhjwlLyjoPc+dFiNqcf4pELu/H7MzsiIgE9ZsD6GhKRWLcmgIhEA0OAlFKbTQVucqevAL6z8wPGmHD134VbuPTVH8jOK2TCqFO57axOAU8CENgaQSvgPfc8QS1goqp+ISJjgYWqOhV4G/hARNKAdGBEAOMxxpiglFtQxONTVzFhwRYGntiUcSP6ENugTrUdP5BXDS0H+pSx/DGf6VzgykDFYIwxwW7Tvmzu+HAxq3cc5K7B8dw7pAsRtQJfC/BldxYbY4xHvl61kwf+u4xaIrwzsj/ndG3hSRyWCIwxppoVFBXz/NepjJ+znpPaNuLVa/vSrkk9z+KxRGCMMdVo18Fc/vTxEuZvTOeGUzswelg36tSu2hvEjpYlAmOMqSbfr9nDfZ8u5VB+EeNG9GZ47zZehwRYIjDGmIArLCrmpZlreC1pHQktGvDKtX3ofBy9hVY1SwTGGBNAOw7kcPcnS1iwcT8jTm7HmIu7V3lfQcfLEoExxgTI9BU7eGTyCvILi4OqKag0SwTGGFPFMg7lM2bqKj5fup2ebRoxbkTvKhk3IFAsERhjTBVKSt3NX/+3nH1Z+dx7XhfuHHwikREB682nSlgiMMaYKrA7M5envkhm6rLtdG4ew1s3nkzPto28DssvlgiMMeY4FBUrH/2yiednpJJXWMzd53bmzkEnUjcyuE4IV8QSgTHGHKOf1+/j6S+TWbHtAKfHN+XJ4T2C+lxAeSwRGGPMUVqzK5Nnv0phVspuWjWqy7gRvbmkV+tq6TI6ECwRGGOMn9btyeLf369j0qKt1I+qzV+HduXm0+NCqhmoLJYIjDGmEos2pfPv79czM3kXkRG1GDmwI3edE0+T+lFeh1YlLBEYY0wZiouVb5N3MX7OehZu2k/jepH8aXA8Nw6Mo1lM9Q0aUx0sERhjjI/cgiKmLNnG+LnrWb8nm7YnRPP4xYlcdXI76kXVzK/MmvmqjDHmKB04VMCHv2ziPz9sZG9WHj3aNOTla/pwQY+W1A7yG8KOlyUCY0xY25aRw9tzNzBhwWYO5RdxVpdY/nBWJ047sWnIXgV0tCwRGGPC0urtBxk/Zx3Tlu9AgIt7tea2MzuR2Lqh16FVO0sExpiwMn9DOq/OTuP7NXuoHxXByIFx3HJGR9o0jvY6NM9YIjDG1HiqyuzU3bw2ex0LN+2naf0o/nJ+Atef0oFG9SK9Ds9zlgiMMTWWqrJgZyHPjJtLys5M2jSO5olLunNV/3ZBNziMlwKWCESkHfA+0AJQYLyqjiu1zSDgc2CDu+gzVR0bqJiMMeFj3tq9PPd1Csu35tEptjYvXNmL4b1bB32X0F4IZI2gELhfVReLSANgkYjMVNXVpbabq6rDAhiHMSaMLNuSwXNfp/BD2j7aNI7m1h5R/O3as4moFR5XAB2LgCUCVd0B7HCnM0UkGWgDlE4Exhhz3HZn5vLMVyl8tngbTepH8diwRK47tT0/zZtrSaASoqqBP4hIHDAH6KGqB32WDwL+B2wFtgMPqOqqMp4/ChgFEBsb22/ixIkBjzkUZGVlERMTel3eBoKVxWHhVhaFxcqszYVMScsnvwiGxkUy7MRIoms7X/7hVh7lGTx48CJV7V/WuoAnAhGJAb4HnlbVz0qtawgUq2qWiFwIjFPVzhXtLyEhQVNTUwMXcAhJSkpi0KBBXocRFKwsDgunsvh5/T4e+3wla3ZlcXaXWMZcnPib8QDCqTwqIiLlJoKAXjUkIpE4v/g/Kp0EAHxrB6o6XUReE5Fmqro3kHEZY0JbZm4Bz3yVwke/bKbtCdGMv6EfQxJbhM2dwFUtkFcNCfA2kKyqL5WzTUtgl6qqiAwAagH7AhWTMSb0zU7dzSOfrWDnwVxuO7Mj9w1JsEtBj1MgawSnAzcAK0Rkqbvsb0B7AFV9A7gCuENECoEcYIRWx0kLY0zIOZBTwNhpq/nf4q3EN49h0h0D6dv+BK/DqhECedXQPKDCepqqvgK8EqgYjDE1w8/r93Hfp0vZlZnHXYPj+dO58dSpbbWAqmJ3FhtjglZ+YTH//HYNb3y/jrim9fnsjoH0atfY67BqHEsExpigtG5PFn+esISV2w5yzYB2jL4okfp17CsrEKxUjTFBRVX56JfNPPXlaqIjI3jj+n4M7dHS67BqNEsExpigkZ6dz4OTlvNt8i7O7NyMF67sRYuGdb0Oq8azRGCMCQo/pO3l3k+XknGogEeHJXLzwDhqWdcQ1cISgTHGUwVFxbw00zkh3KlZff5z88l0b93I67DCiiUCY4xnNu3L5u4JS1m2JYNrBrTn0WHdqBdlX0vVzUrcGOOJyUu28uiUVdQSeP26vlzQs5XXIYUtSwTGmGqVmVvAY5+vYvKSbQyIa8I/R/QO6/GCg4ElAmNMtVm8eT/3TFjK1v2HuPe8Ltx1TryNFRAELBEYYwIur7CIcd+u5Y3v19GqUTQTbz+N/nFNvA7LuCwRGGMCavX2g9w3cSkpOzO5un87Rg/rRoO6kV6HZXxYIjDGBERhUTH/nrOe//t2DY3rRfH2Tf05t1sLr8MyZbBEYIypciu3HeBvk1ewfOsBLjqpFU8N78EJ9aO8DsuUwxKBMabKHMov5J8z1/DODxs5oV4kL1/Th4t7tfY6LFMJSwTGmCoxO2U3o6esZFtGDtcMaMdDQ7vRqJ6dCwgFlgiMMcdl495snvoymW+TdxHfPIaJt5/GgI52RVAosURgjDkmmbkFvPJdGu/8sIGoiFo8ODSBW8/oaCOHhSBLBMaYo5JfWMykRVt5aWYq+7LzuaJvW/5yfgLNrbvokGWJwBjjl5IE8OrsNLZl5NC/wwm8M/JkTmrb2OvQzHGyRGCMqVB+YTH/XbSF12avY1tGDr3bNeapy3owqEssItY9RE1gicAYU6a8wiImLtzK67PT2H4glz7tG/P0ZT042xJAjWOJwBhzhLzCIiYu2MJrSevYcSCXvu0b88zlJ3Fm52aWAGqogCUCEWkHvA+0ABQYr6rjSm0jwDjgQuAQMFJVFwcqJmNM+XILipi40GkC2nkwl/4dTuC5K07ijHhLADVdIGsEhcD9qrpYRBoAi0Rkpqqu9tnmAqCz+zgFeN39a4ypJrkFRUyYv5nXv1/HroN5nBx3Ai9e1YuBJza1BBAmApYIVHUHsMOdzhSRZKAN4JsIhgPvq6oCP4tIYxFp5T7XGBNAuQVFfDJ/M2+4CWBAXBP+eVVvTrMEEHbE+Q4O8EFE4oA5QA9VPeiz/AvgGVWd587PAv6qqgtLPX8UMAogNja238SJEwMecyjIysoiJibG6zCCgpXFYZWVRX6RMntLIdM3FHAgT0k4oRaXxkfRtUmtGpkA7LPhGDx48CJV7V/WuoCfLBaRGOB/wD2+SeBoqOp4YDxAQkKCDho0qOoCDGFJSUlYWTisLA4rryzyCov45JfNvPrDOvZk5nNqpyb8+dwunHZi0+oPshrZZ6NyAU0EIhKJkwQ+UtXPythkG9DOZ76tu8wYU0UKior578KtvPLdWrYfyGVAxya8fE0fTu1UsxOA8V8grxoS4G0gWVVfKmezqcBdIjIB5yTxATs/YEzVKCwqZsrS7fxr1lo2px+iT/vGPHdFL06Pt3MA5kh+JQL3S/06oJOqjhWR9kBLVZ1fwdNOB24AVojIUnfZ34D2AKr6BjAd59LRNJzLR28+lhdhjDlMVZmdspu/T09m7e4surduyDsj+zM4obklAFMmf2sErwHFwDnAWCATp8nn5PKe4J4ArvBT514t9Ec/YzDGVCJl50FeWJjLqn0L6NisPq9f15ehPVpaAjAV8jcRnKKqfUVkCYCq7hcRG3fOmCCxJzOPl2au4dMFm4muDY8NS+T6UzsQVbuW16GZEOBvIigQkQicO4QRkVicGoIxxkNFxcr7P23kxW/WkFtQxE0D4+hXZzfDzujodWgmhPibCP4FTAaai8jTwBXA6IBFZYyp1LItGTwyZQUrtx3kzM7NeOKS7nSKjSEpaY/XoZkQ41ciUNWPRGQRcC5Ou/+lqpoc0MiMMWU6kFPAC1+n8uEvm4iNqcMr1/bhop6t7DyAOWYVJgIR8R14dDfwie86VU0PVGDGmN+asXIHo6esIj07j5tOi+P+33WhQV0bIN4cn8pqBItwzgsIzmWf+93pxsBmwBoijakG6dn5jJm6imnLttO9dUP+M/JkerZt5HVYpoaoMBGoakcAEXkTmKyq0935C4BLAx6dMcatBazkQE4B9w3pwh2DTiQywq4GMlXH35PFp6rqbSUzqvqViDwXoJiMMfy2FvDBrafQrVVDr8MyNZC/iWC7iIwGPnTnrwO2ByYkY4zVAkx18jcRXAOMwbmEFJwupa8JSETGhLEDhwp4bOpKPl9qtQBTffy9fDQd+HOAYzEmrM1Zs4cHJy1nb1Ye957XhTsHWy3AVA9/O52bjXtXsS9VPafKIzImzBzKL+Qf01P44OdNxDeP4c0b+9sVQaZa+ds09IDPdF3gcpwxiY0xx2HRpv3cP3Epm9IP8fszOvLA+QnUjYzwOiwTZvxtGlpUatEPIlJRF9TGmArkFxYzbtYaXk9aR6tG0Xz8+1Nr/EhhJnj52zTke4dxLaAfYHVXY45Bys6D3PfpMlbvOMhV/dvy6LBEuzvYeMrfpiHfO4wLgQ3ArYEKypiaqKhYeWvuel78Zg0No2vz5o39GZLYwuuwjPE7EXRT1VzfBSJSJwDxGFMjbdibzYOTlrFg437O796Cv1/Wk6Yx9i9kgoO/ieBHoG+pZT+VscwY46OoWHl7nlMLqFO7Fi9c2YvL+7axnkJNUKms99GWQBsgWkT6cHjoyYZAvQDHZkxIW7Mrk79MWs6yLRkMSWzB05f2oHnDul6HZcxvVFYjOB8YCbQFXvJZnokzEL0xppSComJeT1rHy9+tpUHdSF6+pg/DTrLxAkzwqqz30feA90TkclX9XzXFZEzIWrgxndFTVpKyM5NLerVmzMWJdi7ABL3KmoauV9UPgTgRua/0elV9qYynGRN20rPzeearZCYu3ErrRnXtiiATUiprGqrv/o052h2LyDvAMGC3qvYoY/0g4HOcS1EBPlPVsUd7HGO8VFysTFy4hWdmpJCVW8jtZ3fiz+d2pl6Uv9dhGOO9ypqG/u3+feIY9v0u8ArwfgXbzFXVYcewb2M8t3BjOk9PT2bJ5gwGdGzCU5f2oEuLBl6HZcxR8/fO4ljgNiDO9zmqekt5z1HVOSISd5zxGRN0UnYe5IWvU/k2eTexDerw4pW9+H92SagJYf7WXz8H5gLfAkVVePzTRGQZziA3D6jqqirctzFVauv+Q7w0cw2Tl2wjpk5t/nJ+AjefHmfNQCbkiepvepf+7UYiS1W191Hv3KkRfFHOOYKGQLGqZonIhcA4Ve1czn5GAaMAYmNj+02cOPFoQ6mRsrKyiIk56tM3NVIgy+JgvjJtXT6zNxeCwJAOkVzUMZKYqOCsAdjn4khWHo7BgwcvUtX+Za3zNxE8BfxYMni9vypKBGVsuxHor6p7K9ouISFBU1NTjyaMGispKYlBgwZ5HUZQCERZZOcV8tbcDbw5dz2H8gu5sl877hnSmVaNoqv0OFXNPhdHsvJwiEi5icDfOu2fgb+JSB5QgHOHsarqMY+h5961vEtVVUQG4PRquu9Y92dMVckvLOaT+Zt5+bu17M3KZ2j3ljxwfgLxze1XpamZ/B2P4KgvhRCRT4BBQDMR2Yoz5nGku783gCuAO0SkEMgBRqg/1RNjAqS4WJm6bDsvzkxlS3oOp3Zqwps3dqVP+xO8Ds2YgPL3qqGyOpc7AGxS1TJHKlPVCge3V9VXcC4vNcZTqkpS6h6enZFCys5MEls15L1benJW52Z2JZAJC/42Db2G09PoCne+J7ASaCQid6jqN4EIzphAW7x5P898lcL8Dem0b1KPcSN6c/FJralVyxKACR/+JoLtwK0ll3eKSCIwFngQ+AywRGBCytpdmTz/dSrfrN5Fs5g6PDm8O1ef3J6o2rW8Ds2YaudvIujie42/qq4Wka6qut6qziaUbM/I4Z8z1/C/xVupH1Wb+4d04ZYzOlK/jt0LYMKXv5/+VSLyOjDBnb8aWO2OUlYQkMiMqUL7s/N5LSmN937aBAq3nN6ROwfH06R+lNehGeM5fxPBSOBO4B53/gfgAZwkMLjKozKmiuQWFPHujxt5dXYa2XmFXN63LfcM6UKbxsF9L4Ax1cnfy0dzgBfdR2lZVRqRMVWguFiZsnQbL3ydyvYDuZzbtTl/vaCrdQpnTBn8vXy0M/APIBH4daw9Ve0UoLiMOWbz1u7l79OTWb3jID3bNOLFq3pz2olNvQ7LmKDlb9PQf3BuCPsnTlPQzTh3AhsTNNbuyuTJL5OZs2YPbU+ItktBjfGTv4kgWlVniYio6ibgcRFZBDwWwNiM8cvB3AI+Ts5j1jdzqR8VweiLunHDaR2oUzvC69CMCQn+JoI8EakFrBWRu4BtHMOoZcZUpeJiZdLirTw3I4V9WYWMGNCev5yfYFcCGXOUjqbTuXrA3cCTwDnATYEKypjKLNuSwZipq1i6JYO+7RtzV89ajBze0+uwjAlJ/l41tMCdzMI5P2CMJ7LyCnl+Rgrv/7yJpvWd0cEu69OGOXO+9zo0Y0JWhYlARKZWtF5VL6nacIwp3+zU3YyevJLtB3K48dQOPHB+Ag3qRnodljEhr7IawWnAFuAT4BeccQiMqVbp2fk8+cVqJi/ZRnzzGCb94TT6dWjidVjG1BiVJYKWwBDgGuBa4EvgExtb2FQHVWd8gCemreZgTgF3nxPPH8+Jt6uBjKliFSYCVS0CZgAz3H6FrgGSROQJdzwBYwJie0YOo6es5LuU3fRq15hnL+9J15bHPCCeMaYClZ4sdhPARThJIA74FzA5sGGZcFVcrHz0yyaenZFKUbHy6LBERg6MI8JuCjMmYCo7Wfw+0AOYDjyhqiurJSoTltJ2Z/HwZ8tZsHE/Z3Zuxt8v60m7JvW8DsuYGq+yGsH1QDbOfQR3+4w9cNyD1xtToqComH9/v45/zUojOiqCF67sxeV929gwkcZUk8rOEVh/Qiaglm/N4MFJy0nZmclFPVvx+CXdiW1Qx+uwjAkrNiyT8UROfhEvzUzl7XkbiG1Qh/E39ON33Vt6HZYxYckSgal2P6bt5aHPVrA5/RDXDGjPwxd2paHdGGaMZywRmGpz4FABf5+ezKcLtxDXtB4TRp3KqZ1snABjvBawRCAi7wDDgN2q2qOM9QKMAy4EDgEjVXVxoOIx3lFVpq/YyZipq9h/KJ8/nH0i95zXmbqRdmOYMcEgkDWCd4FXgPfLWX8B0Nl9nAK87v41Ncj2jBwenbKSWSm76dmmEe/efDI92jTyOixjjI+AJQJVnSMicRVsMhx4X1UV+FlEGotIK1XdEaiYTPUpKlY++Gkjz3+dSrHC6Iu6MXJgHLUj7EI0Y4KNl+cI2uB0aFdiq7vsN4lAREYBowBiY2NJSkqqjviCXlZWVlCWxZbMYv6zMo/1B4rp0SyCmxKjiC3azLy5mwN2zGAtCy9YWRzJyqNyIXGyWFXHA+MBEhISdNCgQd4GFCSSkpIIprLILSjiX7PWMv6n9TSKjmTciEQu6dW6Wm4MC7ay8JKVxZGsPCrnZSLYBrTzmW/rLjMhRlX5Nnk3T0xbxdb9OVzety2jL+rGCTZkpDEhwctEMBW4S0Qm4JwkPmDnB0LPxr3ZPDFtFbNT99C5eQwf33YKA09s5nVYxpijEMjLRz8BBgHNRGQrMAaIBFDVN3A6srsQSMO5fNSGwAwhOflFvJ6Uxhvfryeqdi1GX9SNmwbGEWkng40JOYG8auiaStYr8MdAHd8Ehqoyc/Uunpi2mm0ZOVzauzV/u7AbzRvW9To0Y8wxComTxSY4pOw8yNNfJjN37V4SWjSwO4ONqSEsEZhK7cnM46WZa/h0wWYa1I3ksWGJ3HBaB2sGMqaGsERgypVbUMTb8zbw2uw08gqLGTmwI3efG0/jenY1kDE1iSUC8xvFxcq05dt5bkYq2zJy+F1iCx66oCudYmO8Ds0YEwCWCMwRFm5M58kvk1m2JYMebRry4lW97DyAMTWcJQIDwOZ9h3h2RgpfrthBi4Z1ePHKXlzWpw21bNB4Y2o8SwRh7sChAl6ZvZb3ftxERC3h3vO6cNtZHakXZR8NY8KF/beHqbzCIj74aRMvf5fGwdwCruzXlvt/l0ALux/AmLBjiSDMlAwS8+yMFDanH+KsLrE8fEFXurVq6HVoxhiPWCIII4s2pfP0l8ks3pxB15YNeO+WAZzdJdbrsIwxHrNEEAY27cvm2RkpTF+xk+YN6vDc5Sdxeb+2RNiJYGMMlghqtP3Z+bz8XRof/LyRyIhadiLYGFMm+0aogQqKivnw5038c+YasvIKufrkdtx7XhfrGM4YUyZLBDXM3LV7GDttNWt3Z3Fm52aMviiRhJYNvA7LGBPELBHUEJv2ZfPUl8nMXL2LDk3r8eaN/TmvW/NqGSbSGBPaLBGEuOy8Ql6dncZbczdQO0J4cGgCt57RkTq1I7wOzRgTIiwRhKjiYuWHbQU8+EISuzPz+H992vDXC7raDWHGmKNmiSAEJe84yKNTVrJwUz4ntW3EGzf0o2/7E7wOyxgToiwRhJCsvEL+b+Ya/vPjRhpFR3JLjyhGX3u6dQxnjDkulghCgKoyY+VOnpi2mp0Hc7lmQDsePL8ryxb8aEnAGHPcLBEEuc37DjFm6kpmp+6hW6uGvHpdX/p1sGYgY0zVsUQQpPIKi3hzznpe/i6N2rWE0Rd1Y+TAOGrbOMHGmCpmiSAI/Zi2l9Gfr2T9nmwu7NmSR4cl0qpRtNdhGWNqqID+vBSRoSKSKiJpIvJQGetHisgeEVnqPn4fyHiC3Z7MPO6ZsIRr3/qFwiLl3ZtP5rXr+lkSMMYEVMBqBCISAbwKDAG2AgtEZKqqri616aeqeleg4ggFRcXKx/M389yMFPIKirn7nHjuHBxP3Ui7KcwYE3iBbBoaAKSp6noAEZkADAdKJ4KwtnLbAR6ZspJlWzI4Pb4pTw7vQafYGK/DMsaEkUAmgjbAFp/5rcApZWx3uYicBawB7lXVLaU3EJFRwCiA2NhYkpKSqj7aapZTqExZm883mwppEAW3n1SHU1vlsHnVQjb7uY+srKwaURZVwcriMCuLI1l5VM7rk8XTgE9UNU9EbgfeA84pvZGqjgfGAyQkJOigQYOqNciqpKp8vWoXY6etYufBQq49pT0Pnt+VRvUij3pfSUlJhHJZVCUri8OsLI5k5VG5QCaCbUA7n/m27rJfqeo+n9m3gOcCGI/ntu4/xJjPVzErZfev9wRY1xDGGK8FMhEsADqLSEecBDACuNZ3AxFppao73NlLgOQAxuOZgqJi3p63gXHfrkUEuyfAGBNUApYIVLVQRO4CvgYigHdUdZWIjAUWqupU4G4RuQQoBNKBkYGKxysLN6bzyOSVpO7K5HeJLXj8ku60bmyXgxpjgkdAzxGo6nRgeqllj/lMPww8HMgYvJJxKJ9nvkphwoIttGkczZs39mdIYguvwzLGmN/w+mRxjVNcrPxv8Vb+8VUKB3IKuP2sTvz5vM42YLwxJmjZt1MVWrYlgzFTV7F0Swb9OpzA05f1oGvLhl6HZYwxFbJEUAX2ZuXx/IxUJi7aQrOYOrx0VS8u7d3Guog2xoQESwTHobComA9+3sRLM9eQk1/EbWd24k/nxNOg7tHfE2CMMV6xRHCMfly3lyemriZ1VyZndm7GmIu7E9/cuoYwxoQeSwRHaVtGDn//MpkvV+ygXZNoxt/QjyGJLRCxZiBjTGiyROCn3AJnoJhXk9IAuG9IF0ad1cl6CDXGhDxLBJVQVWau3sWTX65mS3oOF/VsxcMXdqXtCfW8Ds0YY6qEJYIKrNuTxRPTVjNnzR66tIjh49+fwsD4Zl6HZYwxVcoSQRmy8gp5edZa3vlhA3UjI3hsWCI3nNaBSOsbyBhTA1ki8KGqTF6yjX98lcLerDyu6teOvwxNoFlMHa9DM8aYgLFE4Fq57QBjpq5i0ab99GrXmLdu7E+vdo29DssYYwIu7BNBenY+L3yTyifzN9O0fhTPXXESV/Rta3cFG2PCRtgmgsKiYj6ev5kXv1lDVl4hNw/syD1DOtPQ7go2xoSZsEwE8zekM2bqKpJ3HOT0+KY8fnF3Ordo4HVYxhjjibBKBLsO5vKP6clMWbqdNo2jef26vgzt0dLuCjbGhLWwSAT5hcW8+6MzVGRBsXL3OfHcMSie6Ci7K9gYY2p8Ipi3di9jpq5k3Z5szuvWnEeHJdKhaX2vwzLGmKBRYxPBtowcnvpiNV+t3EmHpvV4Z2R/zulqQ0UaY0xpNS4R5BYU8dbc9bwy2+kc7i/nJ3DrGR2tczhjjClHjUoE36Xs4olpq9m07xAX9mzJIxcl0qZxtNdhGWNMUKsRiWDTvmzGTlvNrJTdnBhbnw9vPYUzOlvncMYY44+QTgQ5+UW8lpTGv79fT2SE8MiF3bhpYBxRta1zOGOM8VdAE4GIDAXGARHAW6r6TKn1dYD3gX7APuBqVd1Y2X5VlRkrd/LUl8lsy8jhsj5tePiCrjRvWLfqX4QxxtRwAUsEIhIBvAoMAbYCC0Rkqqqu9tnsVmC/qsaLyAjgWeDqivZbUAw3vD2feWl76dqyARNvP40BHZsE6mUYY0yNF8gawQAgTVXXA4jIBGA44JsIhgOPu9OTgFdERFRVy9vptqxilm/NYOzw7lw7oD21bYwAY4w5LoFMBG2ALT7zW4FTyttGVQtF5ADQFNjru5GIjAJGAcS0aM9TA6NomLeReXM3Bij00JCVlUVSUpLXYQQFK4vDrCyOZOVRuZA4Wayq44HxAAkJCXrJ7wZ7HFFwSEpKYtCgQV6HERSsLA6zsjiSlUflAtmusg1o5zPf1l1W5jYiUhtohHPS2BhjTDUJZCJYAHQWkY4iEgWMAKaW2mYqcJM7fQXwXUXnB4wxxlS9gDUNuW3+dwFf41w++o6qrhKRscBCVZ0KvA18ICJpQDpOsjDGGFONAnqOQFWnA9NLLXvMZzoXuDKQMRhjjKmYXXtpjDFhzhKBMcaEOUsExhgT5iwRGGNMmJNQu1pTRDKBVK/jCBLNKHUXdhizsjjMyuJIVh6ODqoaW9aKkLizuJRUVe3vdRDBQEQWWlk4rCwOs7I4kpVH5axpyBhjwpwlAmOMCXOhmAjGex1AELGyOMzK4jAriyNZeVQi5E4WG2OMqVqhWCMwxhhThSwRGGNMmAvaRCAiQ0UkVUTSROShMtbXEZFP3fW/iEicB2FWCz/K4j4RWS0iy0Vkloh08CLO6lBZWfhsd7mIqIjU2MsG/SkLEbnK/WysEpGPqzvG6uLH/0h7EZktIkvc/5MLvYgzaKlq0D1wuq1eB3QCooBlQGKpbe4E3nCnRwCfeh23h2UxGKjnTt8RzmXhbtcAmAP8DPT3Om4PPxedgSXACe58c6/j9rAsxgN3uNOJwEav4w6mR7DWCH4d+F5V84GSge99DQfec6cnAeeKiFRjjNWl0rJQ1dmqesid/RlnNLiayJ/PBcCTwLNAbnUGV838KYvbgFdVdT+Aqu6u5hiriz9loUBDd7oRsL0a4wt6wZoIyhr4vk1526hqIVAy8H1N409Z+LoV+CqgEXmn0rIQkb5AO1X9sjoD84A/n4suQBcR+UFEfhaRodUWXfXypyweB64Xka04Y6T8qXpCCw2h2MWEKYeIXA/0B872OhYviEgt4CVgpMehBIvaOM1Dg3BqiXNEpKeqZngZlEeuAd5V1RdF5DSckRF7qGqx14EFg2CtEdjA94f5UxaIyHnAI8AlqppXTbFVt8rKogHQA0gSkY3AqcDUGnrC2J/PxVZgqqoWqOoGYA1OYqhp/CmLW4GJAKr6E1AXpzM6Q/AmAhv4/rBKy0JE+gD/xkkCNbUdGCopC1U9oKrNVDVOVeNwzpdcoqoLvQk3oPz5H5mCUxtARJrhNBWtr8YYq4s/ZbEZOBdARLrhJII91RplEAvKROC2+ZcMfJ8MTFR34HsRucTd7G2gqTvw/X1AuZcShjI/y+J5IAb4r4gsFZHS/wQ1gp9lERb8LIuvgX0ishqYDfxFVWtcrdnPsrgfuE1ElgGfACNr6A/HY2JdTBhjTJgLyhqBMcaY6mOJwBhjwpwlAmOMCXOWCIwxJsxZIjDGmDBnicAYY8KcJQJjjAlzlghqGLcP/hd95h8QkcerOYYsn+kfq2B/j4vIA+WsK3Jvoit5xB3v8bwkItEi8r2IRARBLEeUu4i8ISKnexBHViXro0RkjtvVjDkGlghqnjzg/7ldChwVcVTpZ0JVB1bl/sqQo6q9fR4bS1YE4vVUg1uAz1S1CEBEmotIA98NRCT+WHd+nGVyKk63HUHF7Xp6FnC117GEqlD7JzGVK8QZhOPe0ivckcxWuo973GVx7shO7wMrgTNFJEVE3hWRNSLykYic53ZlvFZEBvjsb4qILHJHvxpVVjAlv+ZE5A8+v9o3iMhsd/n1IjLfXf7vkl/CIvKIe/x5QIK/L76M19OuvGOUPo6IfOLWoOJEZKXPNr/Wqsral7t9soi86ZbFNyIS7fP8G8UZFWuZiHzgdn1wj8/6p0Xkz+7sdcDnPi/pbGCKiNRxt70NeNmdPlFE9ojIRjeedBFZJyINfZ5fXpmU+d6VV+7i9M+zRlWLRKS+iHzpvp6VInK1u81v9ukeu9LPk892H7llOUlE6pXx/pb3Xk5xy84cC69HxrFH1T6ALJwBODbi9Mj6AE5f7P2AFUB9nH6JVgF9gDigGDjVfX4cTjLpifNDYRHwDiA4g31M8TlWE/dvNM4XTNOSGHzjKRVfJDAXuBjoBkwDIt11rwE3+sRaz30tacAD5bzeImCp+5hcxusp8xjudJnHcfex0ucYJWVYXrwlZdbbXT4RuN6d7o7T62ezkjJzt1/sztfCGV2rKc7oWjvLeI0PcviL7icgxmfdZOBMdzoJ6FnG848ok/Leu4rKHac/r1vc6cuBN3321aiCfZaUTYWfJ3c7BU5359/xOXaWH+9lBLDH6/+/UH1Ym1oNpKoH3V9/dwM57uIzgMmqmg0gIp8BZ+L00rhJVX2r/BtUdYW73SpglqqqiKzA+YctcbeIXOZOt8Pp4riyTs3G4fQUO01E7sL58lkgzuBy0cBunC/LyeqOuiYVd6KXo6q9S2bEOUfg+3rOLecYuK/f3+NUtK85OGW21N1uEYfL6Rzgv6q6F0BV04F0EdknTq+xLYAlqrpPRFoDGaUPqqrPicgE4HXgRFX1bTPvjvOlC84XZWo5sZd+j8t6706l/PI4H7jZnV4BvCgizwJfqOrcCva5E/8/T1tU9Qd3+kOcz+8LPuvLfS/Vqanki0gDVc0spwxMOSwR1Fz/BywG/uPHttml5n3HMyj2mS/G/cyIyCDgPOA0VT0kIkk4XfuWS0RGAh1weooE51fhe6r6cKnt7vEj5or4vp4yj1GJQo5sNi15XeXFG8eRZVaE8yVVkbdwBtBpifPrF5yk/ZsyFJEzccZZmAyMwS0/t/mprqruF5F2wF512svL8muZHO175zbRNFbV7QCqukackeAuBJ4SkVk4ybC8fVb6eXKV7gGz9Hxl72UdavbwpAFj5whqKPeX50ScATnAaY65VETqiUh94DJ32bFqBOx3/+m74vyaLJeI9MNpYrleD48KNQu4QkSau9s0EZEOOF8ql4pzBU0DnGakY1XeMajgOLuA5iLS1G2bH+bHvsrzHXCliDQteY67fDIwFDgZp/tk1BlbOEJEfv1SdmsN43GaUW7G6Xr9KXd1Ik63y+DUBkqmK1Pee1deeQzG6ca6JKbWwCFV/RCnC/S+FezzaLQXZ/QwgGuBeaXWl1v+bvnuVdWCYzhu2LMaQc32Iu6vR1VdLCLvAvPddW+p6hI59sstZwB/EJFknOaIyq4muQunyWe2W61fqKq/F5HRwDfiXMlSAPxRVX8WkU+BZThV/wXHGCOqurqsY+A0lSwu6ziqWiAiY3HKahuQUsm+dlZw/FUi8jTwvYgUAUtw+sLPF+eEeYa6Vwi5vsFpxvvWna8HXKWq68A58czhoTh9m4VygL4i0lVVUyopljLfu/LKA7gAmOTz/J7A8yJS7JbBHTjNRUfzeShLKvBHEXkHWI3TFParit5LnGRV08epDhgbj8AYlzhXBmWp6guVbVsFx6qF03R3paqu9VneF7hXVW8IdAz+EpHFwCmB/LXt/iD5QlV7HOPzPwMeUtU1VRpYmLCmIWOqmYgk4lyRM8s3CYDzqxyn1uT5DWUlVLVvMDe5iDM85RRLAsfOagTGGBPmrEZgjDFhzhKBMcaEOUsExhgT5iwRGGNMmLNEYIwxYc4SgTHGhDlLBMYYE+b+P021efKheUuUAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "b = (signal.remez(22,np.array([0,1]),np.array([2*np.pi]),\n",
    "Hz=2,type='differentiator'))\n",
    "w,h = signal.freqz(b,1)\n",
    "fig,ax = plt.subplots()    \n",
    "ax.plot(w/np.pi,np.abs(h));ax.grid()\n",
    "ax.set_ylabel('Magnitude')    \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')    \n",
    "ax.set_title('Magnitude Response')    \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b88cfbbb",
   "metadata": {},
   "source": [
    "对于III类滤波器，微分频带不应超过Nyquist频率，幅值向量必须反映此变化，以确保斜率正确："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "176b3f17",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEaCAYAAAAcz1CnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABGO0lEQVR4nO3dd3hU1dbA4d9KIwklkBB6CTWA9A6KhGZFrAjYK1cUyxXvtRcsV6/1s2DBK2JBKSoIUixAQEBAQHrvhE5oSUjP+v44ExhiGiSTSVnv8+SZcs6cvWYnmTV773P2FlXFGGNM2eXj7QCMMcZ4lyUCY4wp4ywRGGNMGWeJwBhjyjhLBMYYU8ZZIjDGmDLOEoEptURknYhEFeLxdopI38I6njHFhSUC4xGuD80UEama5fm/RERFJMLTMajqBaoa7Sr3BRH52tNlZkdEokQkQ0TiRSRORDaJyJ3eiMWY7FgiMJ60AxiS+UBEWgHB3gvHq/apagWgEvBP4FMRifRyTMYAlgiMZ30F3Ob2+HbgS/cdRORKVyvhpIjsEZEXsmy/TUR2iUisiDzr3j3j+pY/UUS+dH3TXiciHd1eu1NE+orIZcBTwCDXt/JV7tvd9j+r1SAit7qV/XSWuHxE5AkR2ebaPlFEQvOqEHXMAI4CrfM6logEisjXruePi8ifIlLdtS1aRF4VkaWu+vvRPQYRGeCqk+OufZtnqZvHRGS1iJwQkQkiEujaVlVEfnK97qiI/C4iPq5ttUTkexE5LCI7ROShvN6zKf4sERhPWgxUEpHmIuILDAayds8k4CSLysCVwDARuQZARFoAHwI3AzWBEKB2ltcPAMa7Xj8V+CBrEKo6C/gPMEFVK6hqm7wCd5X9EXArUAsIA+q47fIgcA3Q07X9GDAqH8f1EZEBQFVgaz6OdTvO+67riuE+INHtkLcBd+HUTxrwnqucpsC3wCNAODADmCYiAW6vvRG4DGiAk5TucD0/Aohxva46ThJVVzKYBqzC+T30AR4RkUvzet+meLNEYDwts1XQD9gA7HXfqKrRqrpGVTNUdTXOh1dP1+YbgGmqukBVU4DngKyTYy1Q1Rmqmu4qK88P+Xy6AfhJVeerajLwLJDhtv0+4GlVjXFtfwG4QUT8cjheLRE5jvMhPhl4VFX/ysexUnESQGNVTVfV5ap60u24X6nqWlVNcMV4oyvpDgKmq+qvqpoKvAkEAd3dXvuequ5T1aM4H/BtXc+n4iSW+qqaqqq/qzMpWScgXFVfVNUUVd0OfIqT4E0JZonAeNpXwE043za/zLpRRLqIyFxXV8MJnA/FzAHmWsCezH1V9RQQm+UQB9zunwICc/kwPhdZy07IUnZ9YLKr++Q4TpJLx/kGnZ19qloZZ4zgPaB3Po/1FfAzMF5E9onI6yLi7/baPW73dwH+OPVXy/U4M/4M177uLaqsdVfBdf8NnNbKLyKyXUSecIuzVmacrlifyuU9mxLCEoHxKFXdhTNofAXwQza7fIPTpVNXVUOAjwFxbduPW3eMiAThfDs+r1CyeS6Bsweva7jd34/THZNZdnCWsvcAl6tqZbefQFU9q8XztyCcb/yPA60yu8ByO5brG/lIVW2B822+P2ePu9R1u18P59v8EWAfzgd3Zvzi2jfX+FwxxqnqCFVtiNP19qiI9HHFuSNLnBVV9Yq8jmmKN0sEpijcDfR2favOqiJwVFWTRKQzTush03fAVSLS3dW3/QJnksS5OghEZA56uqwEBouIv2uQ+YYsZfcXkYtcZb/I2f8vHwOviEh9ABEJF5Gr8xOIq5vrLZyurlyPJSK9RKSVq7vnJM4HvXsX1S0i0sKVqF4EvnN1k00ErhSRPq4WxAggGViUV3wi0l9EGruSxwmc1kkGsBSIE5HHRSRIRHxFpKWIdMrP+zbFlyUC43Gquk1Vl+Ww+X7gRRGJw/lgnOj2unU4A6njcb6hxwOHcD7QztUk122siKxw3X8WaIQzODsSp3XiXvYDruf2u/aJcTveuzgtmV9csS8GupxDPGOAeiJyVR7HqoGTlE7idBnNw+kuyvQVMBanmycQeMgV/ybgFuB9nBbCVcBVriSUlybAbzj1/QfwoarOdSWY/jhjCTtcx/0fzmC2KcHEFqYxJYWIVACOA01UdYeXw/E6EYkGvlbV/3k7FlOyWYvAFGsicpWIBItIeZwzX9YAO70blTGliyUCU9xdjTPwuQ+ny2KwWjPWmEJlXUPGGFPGWYvAGGPKuMK48KZIVa5cWRs3buztMIqFhIQEypcv7+0wigWrizOsLs5m9eFYvnz5EVUNz25biUsE1atXZ9mynM5ELFuio6OJiorydhjFgtXFGVYXZ7P6cIjIrpy2WdeQMcaUcZYIjDGmjLNEYIwxZVyJGyPITmpqKjExMSQlJXk7lCIVEhLChg0biqy8wMBA6tSpg7+/f947G2NKjFKRCGJiYqhYsSIRERE482SVDXFxcVSsWLFIylJVYmNjiYmJoUGDBkVSpjGmaJSKrqGkpCTCwsLKVBIoaiJCWFhYmWt1GVMWlIpEAFgSKAJWx8aUTqWia8gYY8zZjsQns+VgPDtjEziakPvs45YICklMTAwPPPAA69evJyMjg/79+/PGG28QEBDwt32joqJ488036dix41nPjx07lmXLlvHBB39bf/28REREsGzZMqpWrZr3zsaYEi0jQ1m68yg/rd7Hoq2xbD+S3TpQ2bNEUAhUleuuu45hw4bx448/kp6eztChQ3n66ad54403iiSGtLQ0/PwK9utMT0/H19e3kCIyxhSFowkpfPnHTib8uYf9J5II8vele6MwBnWqS4talWhQtTxVK5Qj6L85H8MSQSGYM2cOgYGB3HnnnQD4+vryzjvv0KBBA0aOHImIcOedd7Jq1SqaNWtGYmLi6dd+/vnnvPrqq1SuXJk2bdpQrly5vx3/6NGj3HXXXWzfvp3g4GBGjx5N69at+c9//kNMTAzbt2+nXr16fPDBBwwZMoS9e/fSrVs33GeW/frrr3nvvfdISUmhS5cufPjhh/j6+lKhQgX+8Y9/8NtvvzFq1Cguuugiz1eYMabADscl82H0VsYv3UNiajo9m4bzxOXN6NeiOsEB5/bRXuoSwchp61i/72ShHrNFrUo8f9UFOW5ft24dHTp0OOu5SpUqUa9ePbZu3cpvv/1GcHAwGzZsYPXq1bRv3x6A/fv38/zzz7N8+XJCQkLo1asX7dq1+9vxn3/+edq1a8eUKVOYM2cOt912GytXrgRg/fr1LFiwgKCgIB566CEuuuginnvuOaZPn85nn30GwIYNG5gwYQILFy7E39+f+++/n3HjxnHbbbeRkJBAly5deOuttwqptowxnpSUms6YhTv4cO42klLTubptbf7RsyFNq5//qeQeSwQiEgjMB8q5yvlOVZ/Psk854EugAxALDFLVnZ6KyVvmz5/PQw89BEDr1q1p3bo1AEuWLCEqKorwcGdCwEGDBrF58+a/vX7BggV8//33APTu3ZvY2FhOnnSS3YABAwgKCjpdzg8//ADAlVdeSZUqVQCYPXs2y5cvp1MnZ43xxMREqlWrBjitl+uvv94j79sYU7gWbT3CEz+sYffRU/RrUZ0nL29Gw/AKBT6uJ1sEyUBvVY0XEX9ggYjMVNXFbvvcDRxT1cYiMhj4LzCoIIXm9s3dU1q0aMF333131nMnT55k9+7deHrK7PxMr6uq3H777bz66qt/2xYYGGjjAsYUc3FJqbw6cyPfLNlNRFgw39zThe6NC+8kEI9dR6COeNdDf9dP1uXQrga+cN3/DugjJfBk9T59+nDq1Cm+/PJLwBl0HTFiBHfccQfBwcFcfPHFfPPNNwCsXbuW1atXA9ClSxfmzZtHbGwsqampTJo0Kdvj9+jRg3HjxgHOlLpVq1alUqVKf9vPvZyZM2dy7Nix0/F99913HDp0CHDGHHbtynFGWmNMMbJ811EufWc+45fuZujFDZn58MWFmgTAw2MEIuILLAcaA6NUdUmWXWoDewBUNU1ETgBhwJEsxxkKDAUIDw8nOjr6rIOEhIQQFxfnibeQb1999RWPPvooI0eOJCMjg0suuYQnn3ySuLg4brnlFoYNG0ZkZCSRkZG0bduWhIQEKlSowBNPPEGXLl0ICQmhdevWpKSk/O29jBgxggceeICWLVsSFBTEhx9+SFxcHKpKcnLy6f0fffRR7rrrLsaNG0eXLl2oW7cu8fHx1K1bl6effpq+ffuSkZGBv78/b775JqGhoQDnVHdJSUl/q//iID4+vljG5Q1WF2crqfWhqvyyK42Jm1IICxKe7hJIo+CDLFl0sNDLKpI1i0WkMjAZeFBV17o9vxa4TFVjXI+3AV1U9Ui2BwIiIyN106ZNZz23YcMGmjdv7onQi7WinGsoU3Gta1t85Ayri7OVxPqIS0rl39+tZubaA1x6QXXeGNiGSoEFm+xRRJarasfsthXJWUOqelxE5gKXAWvdNu0F6gIxIuIHhOAMGhtjTJm0Yf9J7h+3gt1HT/H0Fc25p0cDj0/v4rExAhEJd7UEEJEgoB+wMctuU4HbXfdvAOZoUTRRjDGmGJq0bA/XjFpIQnIa44d25d6LGxbJHF+ebBHUBL5wjRP4ABNV9ScReRFYpqpTgc+Ar0RkK3AUGOzBeIwxplhKSk3nhanrGP/nHro3CuPdwe0Ir/j3i0s9xWOJQFVXA3+7OkpVn3O7nwQM9FQMxhhT3O2KTWDY1ytYv/8kw3s15p/9muLrU7QnT5a6K4uNMaak+HndAR6btAofEcbc0ZHezap7JQ5LBMYYU8RS0zN44+dNjJ6/ndZ1Qhh1U3vqhgZ7LZ5SszCNt/n6+tK2bdvTP6+99pq3Q/qbqKgoli1b5u0wjCnTDp5M4uZPlzB6/nZu7VqfSfd182oSAGsRFJqgoKDTE8EVBzYttTHFz7zNh3l0wkpOpaTz7uC2XN22trdDAqxF4FGzZs1i4MAzY+HR0dH0798fgF9++YVu3brRvn17Bg4cSHy8MxtHREQEzz//PO3bt6dVq1Zs3Jj1jFvn6t4777yTrl270q5dO+bOnQs4C9sMGDCA3r1706dPHxITExk8eDDNmzfn2muvPWv669zKf/zxx2nfvn2OU14YY85NWnoGr8/ayO1jllK1QjmmDr+w2CQBKI0tgplPwIE1hXvMGq3g8ty7ehITE2nbtu3px08++STXX389Q4cOJSEhgfLlyzNhwgQGDx7MkSNHePnll/ntt98oX748//3vf3n77bd57jnnhKqqVauyYsUKPvzwQ958803+97//nVXWqFGjEBEWL17M3r17ueSSS07PWrpixQpWr15NaGgob7/9drbTX+dVflhYGCtWrCis2jOm9EpNhG1zYOdCOLkXAspDtRbQ/CqoUh+A/ScSeejbv/hz5zEGd6rL81ddQFBA8Wppl75E4CU5dQ1ddtllTJs2jRtuuIHp06fz+uuvM2/ePNavX8+FF14IQEpKCt26dTv9muuuuw6ADh06nJ5W2t2CBQt48MEHAWjWrBn169c/nQj69et3eg6hnKa/Xrx4ca7lDxpUoAlgjSn9UpNg8Sj4YxScigW/IAipDSmnYOU4+PVZaH8bv9QaxuPTd5OSllGsuoKyKn2JII9v7kVt8ODBfPDBB4SGhtKxY0cqVqyIqtKvXz++/fbbbF+TuUqZr68vaWlp51Refqelzq38/BzDmDIrZhn8cC8c3Q5NLoEu90FED/BzrU9+bCfJC0bht/wzGv35M51DR/L4zVcWyroBnmJjBB7Ws2dPVqxYwaeffsrgwc6F0127dmXhwoVs3boVgISEhGwXpMmJ+7TUmzdvZvfu3URGRv5tv5ymvy5o+caUSaqwZDSMuQwy0uDWKXDzJGjc50wSAKIPBXPxmku5KfUZapZL4uP052nof9R7ceeDJYJCkjlGkPnzxBNPAM63+v79+zNz5szTA8Xh4eGMHTuWIUOG0Lp1a7p165btoHBO7r//fjIyMujatSuDBg1i7Nix2a51PGzYMOLj42nevDnPPffc6eU0C1q+MWVORgbMfBxm/gsa9Yah86BRr7N2ORSXxEPf/sUdn/9JpUB/nhl2N8H3zEBSTsHXN0ByfA4H974imYa6MNk01GfYNNRnlMSphj3F6uJsBa6P9FT4cTisHg9dH4BLXgafM9+h0zOUcUt28casTSSnZXBfVCPuj2pEoL9rQHj7PPjyamh/Kwx4v2BvpgC8Pg21McaUSOmpMOkO2PgT9H4GejwGbrOBLt4eyyvTN7Bm7wkubBzGS1e3/PtYQMOecNE/YcHb0Kw/NL20aN9DPlgiMMaY7GRkwJT7nSRw+evQ5R+nN20+GMd/Z25k9sZD1AwJ5N3BbRnQplbOU0ZHPekcZ9YT0DAK/IpuZtH8KDWJQFWLZN7usqykdSMac95UnQ/tNROh97Onk8C2w/F8Mm8b3y2PoXyAH49f1ow7L4w40w2UE78AuPRVGHc9LPkELnyoCN5E/pWKRBAYGEhsbCxhYWGWDDxEVYmNjSUwMNDboRjjedGvwdJPoNtw6DGC5buO8sm87fy64SD+vj7c0b0Bw3s3JrR8QN7HytSkLzTqAwv/Dzrd7Vx8VkyUikRQp04dYmJiOHz4sLdDKVJJSUlF+sEcGBhInTp1iqw8Y7xi8ccw7zW07c38Wns4oz/+g2W7jlE52J8HezXmtu4RVK1wnl07PR+HMZfAsjHQ/cHCjbsASkUi8Pf3p0GDBt4Oo8hFR0fTrt3f1v4xxpyvVeNh1uPsqd6HO7dez9bFK6hTJYgXrmrBjZ3qEhxQwI/Mel2gQU9Y9D50/sdZ1x94k11HYIwxQMKqqWRMvp+l0oq+u24lsFwA7w9pR/RjUdxxYYOCJ4FM3R+C+IOwYWrhHK8QlIoWgTHGnK+9xxOZPeM7Bm36J6u1Pv+r9zKfR7WkWyMPjTk26g2hDWHpaGh1Q+Ef/zxYIjDGlEnr951k9Pxt7FyzgK/9XuZYudoEDZ7C6Ib1PVuwjw90uhd+ftKZKblGK8+Wl5+QvB2AMcYUpaU7jnL7mKVc8d7vbF+/jG8CXycwpBo1hs8k0tNJIFObweDjDyuzn/ixqFmLwBhT6qkqczcd4sO521i26xhh5QN46eLy3LzuDXwkCO74ESrVKrqAgkMh8jLnOoV+L4Kvdz+KLREYY0otVeXPA2m89u7vbDwQR+3KQYwccAGDGqUT+M01kJ4Md850+uyLWpshsGEabJvt9WknPNY1JCJ1RWSuiKwXkXUi8nA2+0SJyAkRWen6ec5T8RhjypYFW45w9aiFjFqZTEp6Bm8ObEP0v6K4PTKdwHFXQUoc3DYFqrfwToCN+0FQFVj7vXfKd+PJFkEaMEJVV4hIRWC5iPyqquuz7Pe7qvb3YBzGmDJk1Z7jvP7zRhZujaV25SDubhnAUzf1xNdH4OB6+OpayEiF26d5d6DWLwCaXg6bpjuT2/n6ey0Uj7UIVHW/qq5w3Y8DNgDFc502Y0yJdyguiUcnruTqUQvZsD+O5/q3YM5jPelRx99JAtvmwBhXF8wd04vF2To0vwqSTsDO370aRpGsRyAiEcB8oKWqnnR7Pgr4HogB9gGPqeq6bF4/FBgKEB4e3mHixIkej7kkiI+Pp0KF4rv8XVGyujijrNVFWoYye3caU7amkJIOl0X407+RP0F+zjUA8fHxNDm5iCZbPuZUcB3WtHqW5MBwL0ft8ElP5sKFt3GgRi+2NL3Po2X16tUrx/UIPJ4IRKQCMA94RVV/yLKtEpChqvEicgXwrqo2ye142S1MU1bZAiRnWF2cUZbqYvH2WJ77cS2bD8bTs2k4z1/V4uz1AFIS2D/mFmoemONcyDXwCwis5L2AszPhVtizFB7dcNaCN4Utt4VpPHodgYj443zjH5c1CQCo6klVjXfdnwH4i0hVT8ZkjCn54pJSeXryGgaPXsyplHRG39qBsXd2OjsJ7F8No3tR48BcuPjfcNOk4pcEwOkeij8Ae5d5LQSPDRaLc232Z8AGVX07h31qAAdVVUWkM05iivVUTMaYkm/upkM8/cMaDpxM4t4eDXi0XyRBAW7rASTHQ/SrsPgjCA5jdesXaNP7Ea/Fm6cml4CPH2yaAXU7eyUET541dCFwK7BGRFa6nnsKqAegqh8DNwDDRCQNSAQGq61+YozJxonEVF6ctp7vV8TQuFoFvhvWnfb1qpzZIS0FVo6D+W/Ayb3Q/nbo+wLHlq72XtD5EVQZ6nSGbXOh7wteCcFjiUBVFwC5ztikqh8AH3gqBmNM6bB4eyyPTljJwbhkhvdqzIN9GlPOz9UKSDwOqyfCovfgxB6o3QFu+NyZ8rmkaNQb5r4CCbFQPqzIi7cri40xxVZKWgbv/LaZj+dtIyKsPD8M606bupUhLRm2zHEuxlo3BdISoU4nuOr/nFXAStpKhY16wdyXYUc0tLy+yIu3RGCMKZa2HY7n4fF/sXbvSW7qVItnO0HQvgmw6HenGyUlHgIqQtshTjdQrbbeDvn81WoHgSHOtQ6WCIwxZZ2qMn7hRmb+PJ1L/bbyecRewjevhDWuS5Aq1XHm8Y+8EhpcDP6lYB1tH19n5bJt0aBa5C0aSwTGGO9LPA7bo0natoD9a+czMHkLQ3wzQIG0SGh5HdTrDvW7QeV63o7WMxr1clYti90KVXO9nKrQWSIwxnjHsZ2wbjJs/gX2LAFNBwI4mNGYEw3vpHXXS/Cp19mZsrksaNjLud021xKBMaYUS02ENd85p3nu/gMArd6KP2reyjs763EitA3v3NSJC2qFeDlQLwhtACF1YddC6DK0SIu2RGCM8byEWFjyMSz7DE7FQtWm0PtZYur254EZsazadZwhnevxbP/mhbdIfElUryvsmF/k4wRluMaNMR6XHAd/fAiL3nfO8ml6GXS7HyJ6MHnlXp4duw4fgY9ubs/lrWp6O1rvq9cN1kyCYzuKdLEcSwTGmMKn6nyg/fwUJByGZv2h97NQrRlxSak8N3EVk//aS+eIUN4Z3JbalYO8HXHxUL+7c7vrD0sExpgSLHYb/PSI08VRuwMMGQ91nEkvV+w+xiPjVxJz7BT/7NuU4b0bO2sFGEfVSAisDLsXQbubi6xYSwTGmMKhCiu+gFlPgo8/XPk2dLgDfHxJTkvn3d+28PG8bdQMCWLiP7rRMaKMnA10Lnx8nO6h3YuLtFhLBMaYgjt1FKY+CBt/ci6MuvZjqFQLgPX7TvLoxJVsPBDHoI51eaZ/cyoGem9ZxmKvfjfYPBPiD0GFakVSpCUCY0zBxCyHibc6H1yXvAxdHwAfH9LSM/hk/nb+77fNVA4O4LPbO9KneXVvR1v81evm3O7+A1pcXSRFWiIwxpy/FV/B9EehYg2457fT8/2s3XuCpyavYXXMCa5sXZOXr25JlfIB3o21pKjZFnwDIOZPSwTGmGIsPRVmPQF//s/pCho4FoJDOZWSxju/bmbMwp1UCfbn/SHtuKpNLW9HW7L4BUCN1rB3RdEVWWQlGWNKh6STMOl2Z6bMbsOh70jw9WPuxkM8M2Ute48nMqRzXZ64rDkhwTYWcF5qd4C/voL0NPD1/Me0JQJjTP6d3A/jBsKh9XDVe9DhdnYeSeDl6Sv5bcNBGlerwMR/dKNzAzsjqEBqd4Cln8CRTVD9Ao8XZ4nAGJM/B9c7SSDpONw0kbi6PflgxgbGLNxBgK8P/74skrsvanBm5TBz/mp3cG73LrdEYIwpJrbPgwm3gn8gqbdNZ9LeUN6eEE1sQgo3tK/Dvy6NpFqlUrAuQHER2hDKhTjjBO1v83hxlgiMMblbPQmmDCMjtBFTW77LG18fZe/xvXSsX4Uxd3SidZ3K3o6w9PHxgdrtnBZBEbBEYIzJ2aL34ZdnOBjakdvjHmbjrFja1q3My9e2JKppOFLS1gYuSWp3gAX/50zd7e/ZuZgsERhj/i4jg7Sfn8JvyUfM8enGsH3/oEW9MMZe14SelgCKRu0OzmI9+1dDvS4eLcoSgTHmLMlJp9g39i4aHJjJ52mXMr3mcD4d3JweTapaAihKtdo7t/tWlNxEICJ1gS+B6jgrj45W1Xez7CPAu8AVwCngDlUtuqsojDGnJaWmM3nxBhrPGUYnXc3XFe6k8YCnmNTEWgBeUakmlK/mtAg8zJMtgjRghKquEJGKwHIR+VVV17vtcznQxPXTBfjIdWuMKSJJqemMX7qbCdHLeDP5JSJ9Ytjc/Q1u7nevJQBvq9EKDqzxeDEeSwSquh/Y77ofJyIbgNqAeyK4GvhSVRVYLCKVRaSm67XGGA9KSk3n26W7+XjeNirFbWNc8FuEBcThM2gCTZv083Z4BqBma2fAPi0Z/Mp5rJgiGSMQkQigHbAky6bawB63xzGu585KBCIyFBgKEB4eTnR0tKdCLVHi4+OtLlysLs7Iqy5S0pW5e9KYsSOVE8nKzZVW81zQe+BbjpUtXyRurz/szfn1JU1J/tsIP+rHBRlpLJv5NfEVG3msHI8nAhGpAHwPPKKqJ8/nGKo6GhgNEBkZqVFRUYUXYAkWHR2N1YXD6uKMnOoiOS2db5fsZtTCbRyOS6Frgyq8WvsPGix/3bl6dch4OoTUKfqAPaxE/23E1oX1b9CxdgC0j/JYMR5NBCLij5MExqnqD9nssheo6/a4jus5Y0whSU3PYNKyGD6Ys4V9J5Lo3CCUD25sQZeNr8Oyz531hK/9BMpV8HaoJqsqDSCgAhzw7ICxJ88aEuAzYIOqvp3DblOB4SIyHmeQ+ISNDxhTONLSM5iych/vzd7C7qOnaFevMq/f0IYLq8Yjk252Tku88BHo87xzJaspfnx8oHpLj585lK9E4PpQvxloqKovikg9oIaqLs3lZRcCtwJrRGSl67mngHoAqvoxMAPn1NGtOKeP3nk+b8IYc4aqMnfjIf4zYwNbDsVzQa1KjLmjI70iqyFbfoFPhoJmwKCvoflV3g7X5KVma1j5DWRkeCxh57dF8CGQAfQGXgTicLp8OuX0AlVdAOR67pnrbKEH8hmDMSYPGw+c5M1lSayL/ZMGVcvz0c3tuaxlDST1FMz8Nywd7ZySOPALCPPc4KMpRDVaQUo8HNvhsd9ZfhNBF1VtLyJ/AajqMRGxdeeMKSYOxyXz9q+bmfDnboL84Ln+Lbila30C/Hxg9xKYch8c3Q5d7oO+L3h87hpTiGq0dm73r/J6IkgVEV+cK4QRkXCcFoIxxovSM5Qv/9jJW79sJik1ndu7R9Ch3CH6X9QAEo/Dr686rYBKdeD2adDgYm+HbM5VeDMQHzi0wWNF5DcRvAdMBqqJyCvADcAzHovKGJOnVXuO8/SUNazde5IeTaoycsAFNAyvQPTcg7DiS/htJCQehY53Oa2AchW9HbI5H/6BENrIWRXOQ/KVCFR1nIgsB/rg9Ptfo6qeS0/GmBydSEzlzZ838fWSXYRXKMcHN7XjylY1nQG5TbPosPxJiN8OdbvCFa9DzTbeDtkUVLXmcHCdxw6fayIQEfeFRw8B37pvU9WjngrMGPN3s9bu55kp6ziakMzt3SIYcUlTKpbzgy2/QvSrsG8FfoE14LpPodVAsLmCSodqLWDDNI+tTZBXi2A5zriA4Jz2ecx1vzKwG2hQ6BEZY/7maEIKz09dx7RV+7igViU+v6MTrar5waovYMkncGQzVK4HAz5g6fGa9Gzd19shm8JUrTmgcHgT1Gpb6IfPNRGoagMAEfkUmKyqM1yPLweuKfRojDF/47QC1nIiMZVH+zbm/oaH8PvrOVg7GZJPQK12cO1ouOBa8AtAS+i8OiYX1Vo4t4c2FH0icNNVVe/NfKCqM0Xk9UKPxhhz2plWwF6uqhbLCxesJ2z1Y7BgL/iXh+b9odM9UKeTdQGVdqENwTfAYwPG+U0E+0TkGeBr1+ObgX0eicgYw6y1+/lw8myiUuaxPHQZYSe3wxo/aNwX+r0IkZdDQHlvh2mKiq8fVI302Cmk+U0EQ4DncU4hBZjves4YU4hOHtnPL5M+pMH+mUz12QK+QNXu0Gq40/UTHJrnMUwpVa057FrkkUPn9/TRo8DDHonAmLIuLRk2zSR20ReE7J3HDaRzpEJj0rs+j2/rG5xBYGOqNYc1EyHpJARWKtRD53fSubm4rip2p6q9CzUaY8qSA2tg2Rh07Q9I0nFStQrflbua9v3vo2lrW7HVZJE5YHx4I9TtXKiHzm/X0GNu9wOB63HWJDbGnIuMdNg43Tnlc9cCMnwDmU1nvkrpTmS3/oy4rAWB/r7ejtIUR9WaO7eH1nsnEajq8ixPLRSR3KagNsa4S0uGv76CBe/Cid1oSF3m1X+QRza3onxIOG/e1IZujcK8HaUpzkLqOovUeGDAOL9dQ+4jVD5AByCk0KMxprRJS4GVX8P8t+BkDNTpTEzXZ7hvSXXWbkrgxo51eLZ/CyoG+ns7UlPc+fg4E9B54BTS/HYNuV9hnAbsAO4u9GiMKS1UYdNM+OVpZ/rnOp1Iv+o9/re3Pm/9tIVKQal8eltH+rWo7u1ITUlSrRlsmlXoh81vImiuqknuT4hIuUKPxpjS4NBGmPUEbJ8LVZvCTRPZUeVC/v39av7cuYlLL6jOf65tRVgF+xcy5yi8Ofz1NSTEQvnC60rMbyJYBLTP8twf2TxnTNmVlgK/v+X8BATDZa+R3uFuPvtjD299+Tvl/Hx4c2Abrm9fG7Ergc35qNrUuY3dUnSJQERqALWBIBFpx5mlJysBwYUWhTEl3d7l8ONwp/+21UC47DU2x5fjX6P/ZNWe4/RrUZ1XrmlJtUqB3o7UlGRVmzi3RzZDva6Fdti8WgSXAncAdYC33Z6Pw1mI3piyLS0F5r4Ci96DCjVgyARSG1/CR9HbeH/OFioG+vP+kHb0b13TWgGm4CrXA99yTiIoRHnNPvoF8IWIXK+q3xdqycaUdLHb4Pu7Yd9f0O5WuPQVlh1I55n3F7DxQBwD2tTi+ata2FiAKTw+vhDWGI5sKdTD5tU1dIuqfg1EiMijWber6tvZvMyY0m/VeJg+Anz84MavOFr/Ml77aQMTl8VQKyTQzggynlO1CRxYXaiHzKtrKHN6wwrnemARGQP0Bw6paststkcBP+Kcigrwg6q+eK7lGFOkUk7B9Edh1bdQ/0IyrvmEiVuU196KJj4pjX/0bMjDfZoQHJDf8zCMOUdVm8KGqc5Fin6F09rMq2voE9ftyPM49ljgA+DLXPb5XVX7n8exjSl6x3bChFvgwFro+QTL6t/DK99u5q/dx+ncIJSXr2lJ0+q2QLzxsKpNQTOc61Myp50ooPxeWRwO3AtEuL9GVe/K6TWqOl9EIgoYnzHFw9bZzniAZrDn8rGM3Fib335eSnjFcrw1sA3X2Smhpqi4nzlUlIkApwvnd+A3IL1QSnZ0E5FVOIvcPKaq6wrx2MYUnCoseBtmv0RKWDPerPIMn04RKpQ7yr8ujeTOCyOsG8gUrbDGzm0hnjkkqn+bXfrvO4msVNW253xwp0XwUw5jBJWADFWNF5ErgHdVtUkOxxkKDAUIDw/vMHHixHMNpVSKj4+nQoVzHr4plTxRF75pp2i28V3Cjyxmabnu3H3yHhIlkH71/bmygT8VAopnC8D+Ls5WGuuj6x93c7xySzY2/2e+X9OrV6/lqtoxu235TQQvA4syF6/Pr9wSQTb77gQ6quqR3PaLjIzUTZs2nUsYpVZ0dDRRUVHeDqNYKPS6OLyZjPE3Qex23tCb+STlUgZ2qMcj/ZpQMySo8MrxAPu7OFuprI8vr4Gk4zA0Ot8vEZEcE0F+27QPA0+JSDKQinOFsarqeS+T47pq+aCqqoh0xpnVNPZ8j2dMYUldNw394R/Ep/tyf8qTVG7em18ujaRxtdL1rdKUYFWbwspxTtdlIYxN5Xc9gnM+FUJEvgWigKoiEoOz5rG/63gfAzcAw0QkDUgEBmt+mifGeEhGWhpbJjxJ5JbRrMxoxOiaL/D4lT1oV6+Kt0Mz5mxVm0BKPMTth0q1Cny4/J41lN3kcieAXaqa7Uplqprr4vaq+gHO6aXGeJWqsmD1ZoKn/YMOaX8xM+BSyl/7NqOa2ZlAppjKnHzuyOaiSwTAhzgzja5xPW4FrAVCRGSYqv5S4EiM8YIVu48xYeo0Hjw8kmpynL/avsilAx7Cx8cSgCnGTieCLdAwqsCHy28i2AfcnXl6p4i0AF4E/g38AFgiMCXKloNxvPHzJipunMQrAWNIDwpFbvqZdvWyHUszpnipWAMCKhbaKaT5TQRN3c/xV9X1ItJMVbdb09mUJPuOJ/LOr5uZtmIHLwSMY3DAL6TX70HgjWOhfFVvh2dM/ohAWCNn4sNCkN9EsE5EPgLGux4PAta7VilLLZRIjPGgYwkpfBi9lS/+2EUD3Ud05Y+okbgFuj+Ib58XwNcuCjMlTGhD2LeiUA6V37/+O4D7gUdcjxcCj+EkgV6FEokxHpCUms7YRTsZNXcrCcmpvNpgLQMPv4sPgTBkAkRe5u0QjTk/YY1g/RRnTQy/gAIdKr+njyYCb7l+soovUATGeEBGhjJl5V7e/HkT+04kcWXT8rxa7hsqbZkC9S+C6z8tlLMtjPGa0EbO5HPHd0PVxgU6VH5PH20CvAq0AE6vtaeqDQtUujEesGDLEf4zYwPr95+kVe0QPu1xiguWPQgnYqDX09BjhLPAhzElWajr4/fotqJJBMDnOBeEvYPTFXQnzpXAxhQbWw7G8dL0DczffJg6VYIYdX1jrjjwEfLb5863pztnFuo6r8Z4VVgj57YQBozzmwiCVHW2iIiq7gJeEJHlwHMFjsCYAjqZlMo3G5KZ/cvvlA/w5Zkrm3NbtS0EzLjeaQV0G+60BAKCvR2qMYUnOAzKhTgtggLKbyJIFhEfYIuIDAf2ch6rlhlTmDIylO9WxPD6rI3ExqcxuHM9Hu8aROX5z8LsnyCsCdz1M9Tr4u1QjSl8IhDW0FmgpoDOZdK5YOAh4CWgN3B7gUs35jyt2nOc56euY+We47SvV5mHL0jl1iozYMzbID7Q53no9kChLeVnTLEU2hBilhX4MPk9a+hP1914nPEBY7wiPjmNN2Zt5MvFuwgrX463r7+Aa2QeKb+OhORYuOA6uOQlCKnj7VCN8bzQRrBucoFPIc01EYjI1Ny2q+qA8y7ZmHM0d9Mhnpm8ln0nErmtSz2eiNhM0O83QOwWUio2JXDwF9Cgh7fDNKbohGWeQrrrzBKW5yGvFkE3YA/wLbAEZx0CY4rU0YQUXvppPZP/2kvz8HKM672HiM0vwcoNEN4MBo1jxYHyRFkSMGVN5imksds8mghqAP2AIcBNwHTgW1tb2BQFVWXqqn2MnLYe38RYxjVZQfejk5GFh6B6S7j2E2g10Lkm4GC0t8M1puiFuk4hLeCZQ7kmAlVNB2YBs1zzCg0BokVkpGs9AWM8Yt/xRJ6ZspYdm1bxSshsLpU5+OxJgsZ9ndNBG0YVyspMxpRowaEQGFLgM4fyHCx2JYArcZJABPAeMLlApRqTg4wMZdzinfz28xRu4yd6l1sOqf5I6xudBFCtubdDNKb4EHFaBQW8qCyvweIvgZbADGCkqq4tUGnG5GLrgeNM+/ZDeh+bxK0+20kPrIJ0fgw63QsVq3s7PGOKp9CGELO0QIfIq0VwC5CAcx3BQ25rDxR48XpjMqWeOs6S796hwbav+accIa5ifbTnW/i2vcmuBjYmL2GNYN0PkJZ83tfN5DVGYPMJGc85uY/Dv75D8JqvuYhTbA1qzYlL3yKkzQDwsT89Y/IlcxbSY7sgvOl5HcJW4zBF7/Bm0hb8H7J6AqEZ6czx7U7FXo/Qtccl3o7MmJInzO3MIUsEptiLWQ4L3kY3Ticdfyak9eLABfdw37V9qBTo7+3ojCmZ3K8lOE+WCIzn7VsJc16Grb9yyqcC/0u7mjmVruGJGy7mtoZh3o7OmJItOBQCKxfoFFKPJQIRGQP0Bw6paststgvwLnAFcAq4Q1ULZwFOUzwc2ghzX4ENU0nxD+ETn5v5NKkPN/W4gPF9mxDob4vDGFMowhoV6KIyT7YIxgIfAF/msP1yoInrpwvwkevWlHRxB2D2S7DqGzL8gvgp5BaeOdiT+rVr8c11rWhZO8TbERpTuoQ2hN1LzvvlHksEqjpfRCJy2eVq4EtVVWCxiFQWkZqqut9TMRkPS0uGxR/B/DfQtGTW1b2Z+3ZeTGxSJUZc2ZQ7ukfg52tnAxlT6Ko0gLXfn/cspN4cI6iNM6FdphjXc39LBCIyFBgKEB4eTnR0dFHEV+zFx8cXj7pQJSz2TxptG0Nw4n72hHTiqVM38fvm6rSs6svDLQIIT9/Ngt93eyyEYlMXxYDVxdnKQn1UP5RMc81gyS/fkxhc85xfXyIGi1V1NDAaIDIyUqOiorwbUDERHR2N1+vixF6Y8RhsmkFG1aZMrP8ET62uRkiQP+8ObsGANrWQIpgTqFjURTFhdXG2MlEfuwJg47t0aVoNGked88u9mQj2AnXdHtdxPWdKgowMWPYZ/DYSzUhjS+vHuXdzR3bFpHJ9+9o8c2VzqpQ//4UyjDHnoEqEc3ts53m93JuJYCowXETG4wwSn7DxgRLi0AaY+hDELCWxbk+eS7+bSUv9aFKtHN/c257ujap6O0JjypYKNcC3HBzbcV4v9+Tpo98CUUBVEYkBngf8AVT1Y5yJ7K4AtuKcPmpLYBZ3GRnwxwcw5yU0oAKzmozk4fVNCfDz5Zkrm3B79wj8bTDYmKLn4wNV6he/FoGqDsljuwIPeKp8U8iO74Epw2Dn7xys1Ze7Ym9h3ZoArmlbk6euaE61SoHejtCYsq1Kg+KXCEwpsnoSTB9BekYaY6o8yivbOxBZvRLjB11AV7sy2JjioUoE7P4DVM950SZLBCZnicdg+ghY+z27glty+8m7OZZWh+f6N+HWbvWtG8iY4qRKBCSfdP5vg0PP6aWWCEz2ts9DJ99HRvxBRmXcyKjjA7i5eyMe6tOYysF2NpAxxU7mmUNHd1giMAWUmoTOfhFZPIo9UosHkkZSs3k3Zl7ejIbhFbwdnTEmJ6dPId0BdTqc00stEZgzDqzl1IS7CD62ia/S+jKl2n083b+9jQMYUxIU4FoCSwQGMjI4NvsdKix6lYSMYJ72f4qLrrqZSe1q4+Pj+auCjTGFICAYKlS3RGDO3ckDOzk67i4i4pbzm3Zie9f/8Eqf9gQH2J+GMSVOlQhLBCb/klPT+GPyR7Rf/x/CNZ1Jtf/NxYMepW9IkLdDM8acryoRsGvROb/MEkEZo6r8umwD/rNG0Ct9EZsDWuBz3ScMbNba26EZYwqqSgSsnnjO01FbIihDlu86yswfvmTo8XeoIvFsb/MYTa9+CnxspTBjSoUqDQCFE3vOLGqfD5YIyoBdsQn834y/6LTpLZ7xm8PxSk3wGTKVhrXaeDs0Y0xhcj+F1BKBATiWkML7c7ayfsksXvf9mLp+h0jtMpzKfZ8Ff5sbyJhSx/2isnNgiaAUSk3P4OvFuxj960ruTx/Hc36/kl6pLnLddPwjLvR2eMYYT6lQHfwCz/nMIUsEpczvWw7z4rT11D7yO9OCxhLGEegyDN/ez0A5uzLYmFLNxwcqn/t01JYISoldsQm8PH0Dy9Zv4b/lv+WSgHloaDNkwDdQt7O3wzPGFJXQBnBs1zm9xBJBCZeQnMaouVsZ8/s2BvvO4f0KkyiXcQp6PoH0eBT8ynk7RGNMUaoSATsXnNN01JYISqiMDGXh3lT+/WY0teLX8UvIOOolbYLaF8GVb0K15t4O0RjjDVUiICUeTsVC+fwtG2uJoATasP8kz05Zy/ZdR3gt5AcuKfcL+NWA6z+Dltef86IUxphSxH3yOUsEpU98chr/9+tmvl20iaHlfuWr4CkEpiZD9weh5+NQrqK3QzTGeJt7IqjTMV8vsURQAqgqs9Ye4OWpa7j41CwWBf9ISNoRYqt0IGjwh1CtmbdDNMYUF5XrO7fH8n8tgSWCYm537Cme/3ENgVunMyHwO+r474UanaHvl6zZmUqUJQFjjLuAYKhQA47uzPdLLBEUU8lp6Xw6fzt/zp3Mv3y+pWXAdjS0GfT9FiIvd8YBdkZ7O0xjTHFUJcJaBCXdoq1H+OKHKdwcN5bhvmtIr1gben+ItBlsE8QZY/JWpT7sXJjv3X08GAoicpmIbBKRrSLyRDbb7xCRwyKy0vVzjyfjKe4OxyXz8pfTOPrFzXxyagTdgmLg0v/g+9AKaHezJQFjTP5Urg9x+5zpqPPBYy0CEfEFRgH9gBjgTxGZqqrrs+w6QVWHeyqOkiA9Q5k8fznp0a/xuM4Bf3/Suo3Av8fDEBji7fCMMSVNlfqgGXAyBkIb5rm7J7uGOgNbVXU7gIiMB64GsiaCMm399t2sm/QS/U9NwV/SSWh9KyGXPAUVq3s7NGNMSXX6zKFdXk8EtYE9bo9jgC7Z7He9iFwMbAb+qap7su4gIkOBoQDh4eFER0cXfrRFLDk5ibg10+gbN5kWksC6ShdxsvnNJAfXguUbgA15HiM+Pr5U1EVhsLo4w+ribGWxPsolHaIbsGnJr+zfk/cFpt4eLJ4GfKuqySLyD+ALoHfWnVR1NDAaIDIyUqOiooo0yMKk6WmsnfkJ1Za9RXVi2VypC77XvcYFDdqf87Gio6MpyXVRmKwuzrC6OFuZrI/0NFhyH5HVyhGZj/fuyUSwF6jr9riO67nTVDXW7eH/gNc9GI93qXLkr2kkzXyWVqk72ejblBOXvE/TLld6OzJjTGnj6wchdeD47nzt7slE8CfQREQa4CSAwcBN7juISE1V3e96OID89IeUQGm7/+TQD49T6/hydmkNZrd6nZ7X3IOfn50FZIzxkCr14Xj+pqP2WCJQ1TQRGQ78DPgCY1R1nYi8CCxT1anAQyIyAEgDjgJ3eCoer4jdxtFpzxK6czoBWolvqj5I1E3/pk9YJW9HZowp7SrXh80/52tXj44RqOoMYEaW555zu/8k8KQnY/CKxOMkzX4N/2WjKad+fOY3iAYDHuemNvlfTNoYYwqkSn1IOAQpp5xpJ3Lh7cHi0iUjnYwVX5Hyy0gCUo4xMb0XhzqM4J4ruhIcYFVtjClCmaeQntgD4ZG57mqfToVl1yJOTX2M4Nh1rMpoxqSqI7nnxmtoVsO6gYwxXuB+LYElAg87EUPyjKcpt2kKxzSMl/0epeNVd/F6uzr4+NgCMcYYL6niSgT5GDC2RHC+0lNJXzSKjLmvohnpvJd+PUmdH+TJfi2pGOjv7eiMMWVdhergF+gsUJMHSwTnY89SEr4fTvnjm5iT3oHpdR5h+LW9aVytgrcjM8YYhwhUrmctgkKXeIyE6c9Sfu1XnNBQXin3BFFX38k7Laojtk6wMaa4qVwvXxeVWSLID1VSVk4gbcaTBKYcY6xeQeKFj/Nc71YE+ttFYcaYYqpyfYhZludulgjyoEe2cnTig4QdWsT6jEbMrP8at153FXWq5H5erjHGeF2V+pB0HJJO5LqbJYKcpCVz9JfXqbD0XfzVj/eD7qPDdY/yZFObHtoYU0K4n0KaC0sE2UjcPJdTPzxEWNJuZtKd4xeP5L6ojvj7enRBN2OMKVyV6zm3eQwYWyJwo/GH2D1+BPVjpnJIqzEl4k2uHngbVSuU83Zoxhhz7qpEOLd5DBhbIgDIyGDv3NFUWvASNTMSmVh+EM0GvsjdDWp4OzJjjDl/QVUgoKJ1DeXlxM5VHJv4ABGn1rCC5hyKeo0beva0q4KNMSWfSL6moy6ziSAtMY6NE54hcudXpGsQP0Y8Q6/BD9M+KMDboRljTOGpXB+Obs91lzKZCDb9/h2V5z5Jy4xDRAdfSt0b3+DqiPreDssYYwpf5XqwfW6uu5SpRHB473b2ffswbeLns0Pqsvjir+jZ6yq7KtgYU3pVqQ+pp3LdpUwkgpSUFJZNeo02m0cRSTq/17+fjkOeo0FQkLdDM8YYz6qcd29HqU8EK//4jfK//ovuGdtZE9yZ0IHv0qNhC2+HZYwxRaNKGU4E+/fuZsf4x+ge9zNHpAprur9Lq363O6PoxhhTVmReVJaLUpcIkpKS+HPia7Td9jEdSWF5vdu5YNCLtKpQ2duhGWNM0StXEYJCgZM57lKqEsFf0ZOpPO9Zeuge1pbvTPjAd+jQoKW3wzLGGO+qUh/YmePmUpEIYnZs4sCkEXQ89Tv7pAbre46mZdSN1g1kjDEAHe8G5uW4uUQngsSEeP4a/wLtd48lDOHPRg/Q5sZnqBVoU0QbY8xp7W8Fbstxs0en0xSRy0Rkk4hsFZEnstleTkQmuLYvEZGI/BxXMzJYMetLjr3Zju57PmVDpYtIGLqYTrf9hwBLAsYYc0481iIQEV9gFNAPiAH+FJGpqrrebbe7gWOq2lhEBgP/BQbldtyMtBTW/Lcv7ZOXs8OnPhv6fUO77ld66m0YY0yp58muoc7AVlXdDiAi44GrAfdEcDXwguv+d8AHIiKqqjkdtFLiHiKSk1ja7N+0v/5f+Pnb3EDGGFMQnkwEtYE9bo9jgC457aOqaSJyAggDjrjvJCJDgaEAjWtUZFHHDwmsUIUFCxd5KvYSIT4+nujoaG+HUSxYXZxhdXE2q4+8lYjBYlUdDYwGiIyM1Mv6X+vliIqH6OhooqKivB1GsWB1cYbVxdmsPvLmycHivUBdt8d1XM9lu4+I+AEhQKwHYzLGGJOFJxPBn0ATEWkgIgHAYGBqln2mAre77t8AzMltfMAYY0zh81jXkKvPfzjwM+ALjFHVdSLyIrBMVacCnwFfichW4ChOsjDGGFOEPDpGoKozgBlZnnvO7X4SMNCTMRhjjMmdRy8oM8YYU/xZIjDGmDLOEoExxpRxlgiMMaaMk5J2tqaIxAGbvB1HMVGVLFdhl2FWF2dYXZzN6sNRX1XDs9tQIq4szmKTqnb0dhDFgYgss7pwWF2cYXVxNquPvFnXkDHGlHGWCIwxpowriYlgtLcDKEasLs6wujjD6uJsVh95KHGDxcYYYwpXSWwRGGOMKUSWCIwxpowrtonAUwvfl0T5qItHRWS9iKwWkdkiUt8bcRaFvOrCbb/rRURFpNSeNpifuhCRG11/G+tE5JuijrGo5ON/pJ6IzBWRv1z/J1d4I85iS1WL3Q/OtNXbgIZAALAKaJFln/uBj133BwMTvB23F+uiFxDsuj+sLNeFa7+KwHxgMdDR23F78e+iCfAXUMX1uJq34/ZiXYwGhrnutwB2ejvu4vRTXFsEpxe+V9UUIHPhe3dXA1+47n8H9BERKcIYi0qedaGqc1X1lOvhYpzV4Eqj/PxdALwE/BdIKsrgilh+6uJeYJSqHgNQ1UNFHGNRyU9dKFDJdT8E2FeE8RV7xTURZLfwfe2c9lHVNCBz4fvSJj914e5uYKZHI/KePOtCRNoDdVV1elEG5gX5+btoCjQVkYUislhELiuy6IpWfuriBeAWEYnBWSPlwaIJrWQoiVNMmByIyC1AR6Cnt2PxBhHxAd4G7vByKMWFH073UBROK3G+iLRS1ePeDMpLhgBjVfUtEemGszJiS1XN8HZgxUFxbRHYwvdn5KcuEJG+wNPAAFVNLqLYilpedVERaAlEi8hOoCswtZQOGOfn7yIGmKqqqaq6A9iMkxhKm/zUxd3ARABV/QMIxJmMzlB8E4EtfH9GnnUhIu2AT3CSQGntB4Y86kJVT6hqVVWNUNUInPGSAaq6zDvhelR+/kem4LQGEJGqOF1F24swxqKSn7rYDfQBEJHmOIngcJFGWYwVy0Tg6vPPXPh+AzBRXQvfi8gA126fAWGuhe8fBXI8lbAky2ddvAFUACaJyEoRyfpPUCrksy7KhHzWxc9ArIisB+YC/1LVUtdqzmddjADuFZFVwLfAHaX0i+N5sSkmjDGmjCuWLQJjjDFFxxKBMcaUcZYIjDGmjLNEYIwxZZwlAmOMKeMsERhjTBlnicAYY8o4SwSljGsO/rfcHj8mIi8UcQzxbvcXFcLxXhCRx3LYlu66iC7zJ6Kg5XmTiASJyDwR8S0GsZxV7yLysYhc6IU44vPYHiAi811TzZjzYImg9EkGrnNNKXBOxFGofxOq2r0wj5eNRFVt6/azM3ODJ95PEbgL+EFV0wFEpJqIVHTfQUQan+/BC1gnXXGm7ShWXFNPzwYGeTuWkqqk/ZOYvKXhLMLxz6wbXCuZrXX9POJ6LsK1stOXwFqgh4hsFJGxIrJZRMaJSF/XVMZbRKSz2/GmiMhy1+pXQ7MLJvPbnIjc5/atfYeIzHU9f4uILHU9/0nmN2ERedpV/gIgMr9vPpv3UzenMrKWIyLfulpQESKy1m2f062q7I7l2n+DiHzqqotfRCTI7fW3ibMq1ioR+co19cEjbttfEZGHXQ9vBn50e0s9gSkiUs61773A+677jUTksIjsdMVzVES2iUglt9fnVCfZ/u5yqndx5ufZrKrpIlJeRKa73s9aERnk2udvx3SVneffk9t+41x1+Z2IBGfz+83pdznFVXfmfHh7ZRz7KdwfIB5nAY6dODOyPoYzF3sHYA1QHmdeonVAOyACyAC6ul4fgZNMWuF8UVgOjAEEZ7GPKW5lhbpug3A+YMIyY3CPJ0t8/sDvwFVAc2Aa4O/a9iFwm1uswa73shV4LIf3mw6sdP1Mzub9ZFuG63625biOsdatjMw6zCnezDpr63p+InCL6/4FOLN+Vs2sM9f+K1yPfXBW1wrDWV3rQDbv8d+c+aD7A6jgtm0y0MN1Pxpolc3rz6qTnH53udU7znxed7nuXw986naskFyOmVk3uf49ufZT4ELX4zFuZcfn43fpCxz29v9fSf2xPrVSSFVPur79PQQkup6+CJisqgkAIvID0ANnlsZdqure5N+hqmtc+60DZquqisganH/YTA+JyLWu+3VxpjjOa1Kzd3Fmip0mIsNxPnz+FGdxuSDgEM6H5WR1rbomuU+il6iqbTMfiDNG4P5++uRQBq73n99ycjvWfJw6W+nabzln6qk3MElVjwCo6lHgqIjEijNrbHXgL1WNFZFawPGsharq6yIyHvgIaKSq7n3mF+B86ILzQbkph9iz/o6z+911Jef6uBS403V/DfCWiPwX+ElVf8/lmAfI/9/THlVd6Lr/Nc7f75tu23P8XarTUkkRkYqqGpdDHZgcWCIovf4PWAF8no99E7I8dl/PIMPtcQauvxkRiQL6At1U9ZSIRONM7ZsjEbkDqI8zUyQ43wq/UNUns+z3SD5izo37+8m2jDykcXa3aeb7yineCM6us3ScD6nc/A9nAZ0aON9+wUnaf6tDEemBs87CZOB5XPXn6n4KVNVjIlIXOKJOf3l2TtfJuf7uXF00lVV1H4CqbhZnJbgrgJdFZDZOMszpmHn+PblknQEz6+O8fpflKN3Lk3qMjRGUUq5vnhNxFuQApzvmGhEJFpHywLWu585XCHDM9U/fDOfbZI5EpANOF8stemZVqNnADSJSzbVPqIjUx/lQuUacM2gq4nQjna+cyiCXcg4C1UQkzNU33z8fx8rJHGCgiIRlvsb1/GTgMqATzvTJqLO2sK+InP5QdrUaRuN0o9yJM/X6y67NLXCmXQanNZB5Py85/e5yqo9eONNYZ8ZUCzilql/jTIHePpdjnot64qweBnATsCDL9hzr31W/R1Q19TzKLfOsRVC6vYXr26OqrhCRscBS17b/qepfcv6nW84C7hORDTjdEXmdTTIcp8tnrqtZv0xV7xGRZ4BfxDmTJRV4QFUXi8gEYBVO0//P84wRVV2fXRk4XSUrsitHVVNF5EWcutoLbMzjWAdyKX+diLwCzBORdOAvnLnwU8QZMD+urjOEXH7B6cb7zfU4GLhRVbeBM/DMmaU43buFEoH2ItJMVTfmUS3Z/u5yqg/gcuA7t9e3At4QkQxXHQzD6S46l7+H7GwCHhCRMcB6nK6w03L7XeIkq9K+TrXH2HoExriIc2ZQvKq+mde+hVCWD07X3UBV3eL2fHvgn6p6q6djyC8RWQF08eS3bdcXkp9UteV5vv4H4AlV3VyogZUR1jVkTBETkRY4Z+TMdk8C4Hwrx2k1ef2Cskyq2r44d7mIszzlFEsC589aBMYYU8ZZi8AYY8o4SwTGGFPGWSIwxpgyzhKBMcaUcZYIjDGmjLNEYIwxZZwlAmOMKeP+H6e8MtoLBmR7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "bb = (signal.remez(21,np.array([0,0.9]),np.array([2*np.pi]),\n",
    "Hz=2,type='differentiator'))\n",
    "w1,h1 = signal.freqz(bb,1)\n",
    "fig,ax = plt.subplots()\n",
    "ax.plot(w/np.pi,np.abs(h),label='Odd order')\n",
    "ax.plot(w1/np.pi,np.abs(h1),label='Even order')\n",
    "ax.grid();ax.legend()\n",
    "ax.set_ylabel('Magnitude')    \n",
    "ax.set_xlabel('Normalized Frequency(×$\\pi$ rad/sample)')    \n",
    "ax.set_title('Magnitude Response')    \n",
    "ax.autoscale(tight=True,axis='x')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f0d052f",
   "metadata": {},
   "source": [
    "在`'d'`模式下，**firpm/remez**在非零幅值频带中对误差加权，以最小化最大相对误差。在`'d'`模式下，**firls/remez**在非零幅值频带中对误差加权。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
